如何以相同形式保存req.body和req.file

时间:2018-07-14 20:33:20

标签: javascript node.js mongodb

我的表单具有文件输入和文本输入

<form action ='/admin-panel' method='post' enctype="multipart/form-data">
<input type='text' name='title'/>
<textarea name='content'></textarea>
<input type="file" name="picture">
<button type="submit">Submit</button>

我可以将标题和内容字段保存在mongoDB中,也可以将文件保存在目标/uploads

这是代码:

app.post('/admin-panel',upload.single('picture'),function(req,res){


db.collection('articles').save(req.body,function (err,result){
if(err){return console.log(err)}
    else{
      console.log(req.file.filename) // form files
    console.log(req.body.title) // form files

        res.redirect('/admin-panel');
    }
});
})

问题是如何将req.file.filename保存到我的数据库中?

1 个答案:

答案 0 :(得分:1)

您可以使用对象展开运算符,如下所示:

app.post('/admin-panel',upload.single('picture'),function(req,res){


db.collection('articles').save({filename:req.file.filename,...req.body},function (err,result){
if(err){return console.log(err)}
    else{
      console.log(req.file.filename) // form files
    console.log(req.body.title) // form files

        res.redirect('/admin-panel');
    }
});
})

请参见({filename:req.file.filename,...req.body}),它将为您提供一个包含文件名和req.body中所有属性的对象。

仅出于安全性建议,请确保用户在正文中发送了什么,他们可能会覆盖请求正文中的req.file.filename。因此,我的建议是将其更改为:({...req.body,req.file.filename}),这样,如果req.body中的文件名优先于req.file的相同字段

详细了解它: