带有graphql createReadStream的node.js/react上载文件不是函数
我正在尝试将一个文件(图像)从我的客户端应用程序(react)发送到服务器(node.js)。 我得到了错误:带有graphql createReadStream的node.js/react上载文件不是函数,node.js,reactjs,graphql,fs,Node.js,Reactjs,Graphql,Fs,我正在尝试将一个文件(图像)从我的客户端应用程序(react)发送到服务器(node.js)。 我得到了错误:TypeError:createReadStream不是一个函数 这是我的代码: graphql模式: type File { filename: String! mimetype: String! enconding: String! } extend type Mutation { singleUpload(file: Upload!):
TypeError:createReadStream不是一个函数
这是我的代码:
graphql模式:
type File {
filename: String!
mimetype: String!
enconding: String!
}
extend type Mutation {
singleUpload(file: Upload!): File!
}
graphql解析器:
module.exports = {
Mutation: {
async singleUpload(_, { file }) {
try {
const { createReadStream, filename } = await file;
const stream = createReadStream();
const pathName = path.join(__dirname, `/src/image/${filename}`);
await stream.pipe(fs.createWriteStream(pathName));
return file;
} catch (err) {
console.log(err);
return err;
}
},
}
阿波罗服务器:
const apolloServer = new ApolloServer({
typeDefs,
resolvers,
context,
introspection: true,
playground: {
settings: {
"schema.polling.enable": false,
"editor.fontSize": 18,
},
},
});
应用客户端
const appClient = new ApolloClient({
link: createUploadLink({ uri: baseURL + "/graphql" }),
cache: new InMemoryCache(),
});
const SINGLE_UPLOAD = gql`
mutation singleUpload($file: Upload!) {
singleUpload(file: $file) {
filename
mimetype
enconding
}
}
`;
const [userImage, setUserImage] = useState();
const handleSubmit = (event: any) => {
uploadFile({ variables: { file: userImage } });
}
调试服务器中的文件对象时,它看起来像C://fakeaddress/name.jpg
你知道我为什么会犯这个错误吗
我正在使用所有模块的最新版本。我设法使其正常工作:
const [file, setFile] = useState({});
const [uploadFile] = useMutation(UploadMutation);
const handleSubmit = async () => {
if (file) {
uploadFile({
variables: { file },
// add the rest of the form fields to this query
// refetchQueries: [{ query: FileQuery, variables: file }],
});
setFile({});
// post message on form
console.log("Uploaded successfully: ", file);
} else {
// return alertk
console.log("No files to upload");
}
};
const { getRootProps, getInputProps } = useDropzone({
accept: "image/*",
onDrop: (acceptedFile) => {
setFile(
Object.assign(acceptedFile[0], {
preview: URL.createObjectURL(acceptedFile[0]),
})
);
},
});
<div {...getRootProps({ className: "dropzone" })}>
<input {...getInputProps()} />
<p>Drag 'n' drop some file here, or click to select file</p>
</div>
const[file,setFile]=useState({});
const[uploadFile]=useMutation(UploadMutation);
const handleSubmit=async()=>{
如果(文件){
上传文件({
变量:{file},
//将其余表单字段添加到此查询
//refetchQueries:[{query:FileQuery,变量:file}],
});
setFile({});
//在表单上发布消息
log(“上传成功:”,文件);
}否则{
//返回警报
log(“没有要上传的文件”);
}
};
const{getRootProps,getInputProps}=useDropzone({
接受:“image/*”,
onDrop:(acceptedFile)=>{
设置文件(
Object.assign(acceptedFile[0]{
预览:URL.createObjectURL(acceptedFile[0]),
})
);
},
});
在此处拖放一些文件,或单击以选择文件
没有发送文件,只有文件名?检查网络请求正文-对于上载,它应该是表单数据编码的,而不是asnwer的常见json查询+VariablesHanks。我想这就是问题所在。。。