Node.js returns 中的 Multer 中间件在 req.body 中为空 object,在 req.file 中未定义
Multer middlware in Node.js returns empty object in req.body and undefined in req.file
问题是当我使用 multer 并在 Postman 中发送请求时,req.body 是空的 object 而 req.file 是未定义的。我取消选中邮递员中的 content-type header。
代码如下:
//Route
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '../uploads/');
},
filename: function (req, file, cb) {
cb(null, new Date().toISOString() + file.originalname);
}
});
const upload = multer({
storage,
limits: {fileSize: 1024 * 1024 * 10}
});
router.post('/test', upload.single('profilePicture'), authController.test);
//Controller
const test = (req, res) => {
console.log(req.body)
console.log(req.files)
res.json({body:req.body, files:req.files})
}
//app.js
app.use(express.json({extended: true, limit: '30mb'}));
app.use(express.urlencoded({extended: true, limit: '30mb'}))
app.use(cookieParser());
app.use('/api/auth', authRoutes);
app.use('/api/product', productRoutes);
app.use('/api/profile', profileRoutes);
编辑:原来是Postman的问题。我从 React 应用程序向 axios 发出请求,一切正常。那么问题来了,为什么它在 Postman 中不起作用?是软件中的一些错误还是我们应该更改某些设置?
问题是 Nodejs 默认使用 Ansynchornus Javascript。在传统的 JS 编程中,您需要使用 async-await
方法和 try-catch-finally
方法。
所以你的控制器看起来像 -
//Route
router.post('/test', async (req, res, next)=>
{
try{
await upload.single('profilePicture')
next()
} catch(err){
console.log(err)
res.send('failed!')
},
authController.test);
//Controller
const test = async (req, res) => {
try{
console.log(req.body)
console.log(req.files)
res.json({body:req.body, files:req.files})
} catch(err){
console.log(err);
}
}
迟来的答案补充。
如果您只想访问上传的图片,那么您应该使用 buffer
.
var storage = multer.memoryStorage()
var upload = multer({ storage: storage })
问题是当我使用 multer 并在 Postman 中发送请求时,req.body 是空的 object 而 req.file 是未定义的。我取消选中邮递员中的 content-type header。
代码如下:
//Route
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, '../uploads/');
},
filename: function (req, file, cb) {
cb(null, new Date().toISOString() + file.originalname);
}
});
const upload = multer({
storage,
limits: {fileSize: 1024 * 1024 * 10}
});
router.post('/test', upload.single('profilePicture'), authController.test);
//Controller
const test = (req, res) => {
console.log(req.body)
console.log(req.files)
res.json({body:req.body, files:req.files})
}
//app.js
app.use(express.json({extended: true, limit: '30mb'}));
app.use(express.urlencoded({extended: true, limit: '30mb'}))
app.use(cookieParser());
app.use('/api/auth', authRoutes);
app.use('/api/product', productRoutes);
app.use('/api/profile', profileRoutes);
编辑:原来是Postman的问题。我从 React 应用程序向 axios 发出请求,一切正常。那么问题来了,为什么它在 Postman 中不起作用?是软件中的一些错误还是我们应该更改某些设置?
问题是 Nodejs 默认使用 Ansynchornus Javascript。在传统的 JS 编程中,您需要使用 async-await
方法和 try-catch-finally
方法。
所以你的控制器看起来像 -
//Route
router.post('/test', async (req, res, next)=>
{
try{
await upload.single('profilePicture')
next()
} catch(err){
console.log(err)
res.send('failed!')
},
authController.test);
//Controller
const test = async (req, res) => {
try{
console.log(req.body)
console.log(req.files)
res.json({body:req.body, files:req.files})
} catch(err){
console.log(err);
}
}
迟来的答案补充。
如果您只想访问上传的图片,那么您应该使用 buffer
.
var storage = multer.memoryStorage()
var upload = multer({ storage: storage })