Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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
Javascript 图形ql阿波罗服务器&x2B;Vue=>;图像上传_Javascript_Vue.js_Vuejs2_Graphql_Apollo - Fatal编程技术网

Javascript 图形ql阿波罗服务器&x2B;Vue=>;图像上传

Javascript 图形ql阿波罗服务器&x2B;Vue=>;图像上传,javascript,vue.js,vuejs2,graphql,apollo,Javascript,Vue.js,Vuejs2,Graphql,Apollo,我在前端使用Vue和Vue apollo,在后端通过mongoose使用graphql独立apollo Server 2和mongodb。我有一个简单的博客应用程序,其中的帖子也有图片。除了上传图片外,一切正常。我希望将图像上传到我后端的一个文件夹中的本地文件系统,并且只上传到保存在mongodb文档中的图像路径 突变: async createPost(parent, args, context, info) { //... const {stream, f

我在前端使用Vue和Vue apollo,在后端通过mongoose使用graphql独立apollo Server 2和mongodb。我有一个简单的博客应用程序,其中的帖子也有图片。除了上传图片外,一切正常。我希望将图像上传到我后端的一个文件夹中的本地文件系统,并且只上传到保存在mongodb文档中的图像路径

突变:

 async createPost(parent, args, context, info) {
         //...
        const {stream, filename} = await args.img

        const img_path = await upload({stream, filename})

        const post = await Post.save({
            //img is a string in my mongo model
            img: img_path,
            author_name: args.user.username,
            author_email: args.user.email
        });
    }
应返回路径并将图像保存到本地的上载方法:

const upload = ({ stream, filename }) => {
  const id = shortid.generate()
  const path = `${UPLOAD_DIR}/${filename}-${id}`
  new Promise((resolve, reject) =>
  stream
  .pipe(fs.createWriteStream(filename))
  .on("finish", () => resolve(path))
  .on("error", reject(Error))
);
}

我得到的错误是调用upload()时未定义流和文件名,但如果我记录args.img,则它是一个对象。把它们上传到我的本地文件夹也不起作用。我们非常感谢您的帮助,并将其标记为已接受的答案

很高兴与您共享graphql模式,以便我们能够看到您返回的类型。然而,以下是我在大多数应用程序中处理文件上传的方式

graphql模式 猫鼬模式
从“mongoose”导入{Schema,model};
const fileSchema=新模式({
文件名:String,
mimetype:String,
路径:字符串,
});
导出默认模型(“文件”,fileSchema);
用于存储上载的函数:
const storeUpload=async({stream,filename,mimetype})=>{
const id=shortid.generate();
常量路径=`images/${id}-${filename}`;
//(createWriteStream)将文件写入图像目录
返回新承诺((解决、拒绝)=>
流动
.pipe(createWriteStream(路径))
.on(“finish”,()=>resolve({id,path,filename,mimetype}))
.on(“错误”,拒绝)
);
};
处理上传的文件
constprocessupload=async(upload)=>{
const{createReadStream,filename,mimetype}=wait upload;
const stream=createReadStream();
const file=wait storeUpload({stream,filename,mimetype});
返回文件;
};
突变
导出默认值{
突变:{
uploadFile:async({file})=>{
mkdir(“图像”{recursive:true},(err)=>{
如果(错误)抛出错误;
});
const upload=wait processUpload(文件);
//将文件保存到mongodb
等待文件。创建(上传);
返回上传;
},
},
};

type File {
    id: ID!
    filename: String!
    mimetype: String!
    path: String!
  }