如何使用GridFS同时将图片上传到MongoDB和字符串数据?

时间:2018-12-31 16:42:26

标签: node.js reactjs mern

正在尝试创建一个应用程序以使用GridFs将图像直接上传和添加字幕到mongodb。然后创建一个API以在客户端显示这些图像和标题。 主要问题。 这是我与grdifs存储引擎兼容的产品。就像魅力一样。

const storage = new GridFsStorage({
    url : mongoURI,
    file : (req, file) => {
        return new Promise((resolve, reject) => {
            crypto.randomBytes(16, (err, buff) => {
                if(err){
                    return reject(err);
                }
                const filename = buff.toString('hex') +                                 path.extname(file.originalname);
                    const fileInfo = {
                        filename: filename,
                        caption :  req.body.name,
                        bucketName : 'uploads'
                    };
                    resolve(fileInfo);
                });
        });
    }
});

const upload = multer({ storage });

app.post('/upload', upload.single('file'), (req, res) =>{
    res.json({file : req.file});
});

问题是,当我尝试使用我创建的Post Model并在该路线上使用猫鼬方案合并其他动作后,像这样。

app.post('/upload', upload.single('file'), (req, res) =>{
    const newPost = new Post({
        caption : req.body.caption,
        image :  req.file.filename
    })
    newPost.save()
        .then(post => res.json('Posted'))
        .catch(err => console.log(err)) ;
    //res.json({file : req.file});

}); 服务器只是在加载时卡住了。 因此,我的问题是,使用gridfs是否会改变我们通常在MongoDB中使用猫鼬模型的方式?

我的帖子模型(post.js)

const mongoose = require('mongoose');
const Schema = mongoose.Schema; 

//Post Schema
let PostSchema = new Schema({
  caption : {
    type : String,
    required : true
  },
  image : {
    type: String,
    required: true
  }
});     

let Post = module.exports = mongoose.model('Post', PostSchema);

我想使用此Post集合来存储上载的图像文件名以及来自客户端的标题。我做错了,我需要帮助。

另一个问题,现在正在使用表单来发出此POST请求。但是,当我尝试使用axios从客户端端口(即8080)向我的API端口(即5000)发出发布请求时,出现CORS错误。 我该如何克服?

0 个答案:

没有答案