Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有graphql createReadStream的node.js/react上载文件不是函数_Node.js_Reactjs_Graphql_Fs - Fatal编程技术网

带有graphql createReadStream的node.js/react上载文件不是函数

带有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!):

我正在尝试将一个文件(图像)从我的客户端应用程序(react)发送到服务器(node.js)。 我得到了错误:
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。我想这就是问题所在。。。