【发布时间】:2020-08-26 05:43:33
【问题描述】:
当我通过这样的表单数据使用postman 发布请求时,我的 express js 中有空对象:
var storage = multer.diskStorage({
destination: function (request, file, callback) {
callback(null, 'public/images/course');
},
filename: function (request, file, callback) {
console.log(req.file)
if (request.files) {
console.log(file)
// TODO: consider adding file type extension
fileExtension = file.originalname.split('.')[1]
return callback(null, `${request.path}-${request.files[0]._id.toString()}.${fileExtension}`);
}
// fallback to the original name if you don't have a book attached to the request yet.
return callback(null, file.originalname)
}
});
var uploadImg = multer({storage : storage}).single('thumbnail')
router.post('/course', async(req, res) => {
console.log(req.body) // console logs empty object {}
try{
const course = new Course({
name : req.body.name,
thumbnail : 'placeholder'
})
uploadImg(req, res, function (err) {
if (err) {
console.log(err.message);
// An error occurred when uploading
return
}
console.log('Everything went fine');
// Everything went fine
})
}catch(e){
res.status().send()
}
})
之前我不能使用 multer 来解析数据,因为首先我想通过 mongoose 生成一个 id,然后我像上面一样使用 multer。
例如,我不能这样做:
router.post('/course', upload.single(), async(req, res) => {
console.log(req.body) // console logs empty object {}
try{
const course = new Course({
name : req.body.name,
thumbnail : 'placeholder'
})
uploadImg(req, res, function (err) {
if (err) {
console.log(err.message);
// An error occurred when uploading
return
}
console.log('Everything went fine');
// Everything went fine
})
}catch(e){
res.status().send()
}
})
它给出了一个错误:意外字段。
那么有什么方法可以先获取我的 req.body 数据,这样我就可以生成我的 mongoose id 然后上传图片
//index.js
const express = require('express')
var multer = require('multer');
require('./db/mongoose')
const userRouter = require('./routers/user')
const taskRouter = require('./routers/task')
const courseRouter = require('./routers/course')
var bodyParser = require('body-parser');
const app = express()
const port = process.env.PORT || 3000
// // for parsing application/json
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.json())
app.use(express.static('public'))
app.use(userRouter)
app.use(taskRouter)
app.use(courseRouter)
app.listen(port, () => {
console.log('connected succefully')
})
【问题讨论】:
-
你能添加你的主应用文件吗,我想看看你正在使用的模块。也许它与
body-parserlib 有关。 -
这里是@Danizavtz
标签: node.js mongodb express postman form-data