Node.js multer-req.file未定义。
我正在使用Node、Express、Handlebar和multer创建一个用于上传图像的应用程序。每次我提交表单时,req.file都是未定义的。我花了一整天的时间来排除故障,但不知道我做错了什么 路由器文件:Node.js multer-req.file未定义。,node.js,express,multer,Node.js,Express,Multer,我正在使用Node、Express、Handlebar和multer创建一个用于上传图像的应用程序。每次我提交表单时,req.file都是未定义的。我花了一整天的时间来排除故障,但不知道我做错了什么 路由器文件: const express = require('express'); const router = express.Router(); const multer = require('multer'); const mongoose = require('mongoose'); co
const express = require('express');
const router = express.Router();
const multer = require('multer');
const mongoose = require('mongoose');
const path = require('path');
const methodOverride = require('method-override');
//Set Storage Engine
const storage = multer.diskStorage({
destination: './public/uploads/images',
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() +
path.extname(file.originalname));
}
});
const upload = multer({
storage: storage
}).single('featuredImage');
//Change Featured Image - POST
router.post('/saveImage/:id', (req, res) => {
console.log(req.file);
//removed the rest of the code to keep it simple. req.file here is always undefined.
});
表格
<form action="/saveImage/{{pitch.id}}" method="POST" enctype="multipart/form-data">
<div class="form-group">
<label for="featuredImage">Featured Image</label>
<input type="file" name="featuredImage" id="featuredImage">
</div>
<input type="submit" value="SAVE">
</form>
请参考这个问题。它有你正在寻找的答案
您需要添加
upload.single('featuredImage')
作为相应路由的中间件,如下所示
const upload=multer({storage:storage})代码>
使用以下命令:
var fileupload = require("express-fileupload");
app.use(fileupload());
在我的例子中,这是图像大小的问题。我通过定义multer limit解决了这个问题,如下所示:
const upload = multer({ storage: storage, limits: { fieldSize: 10 * 1024 * 1024 } }); //10MB
我花了很长时间才弄明白。
也许这可以帮助某人您需要在api路由中添加中间件。根据git问题,即使您使用upload.single(),您也会在req.files
中获得文件,而不是req.file
,因此请尝试req.files
并发布back@sidgujrathi你错了,我的朋友。它仍然是req.file
Yes,它仍然是req.file。仍然尝试req.files,但未定义。非常感谢您的帮助。我试过了,但得到了错误:TypeError:upload.single不是函数。@Uzair您必须更改const upload=multer({storage:storage}).single('featuredImage')
this toconst upload=multer({storage:storage})
。有些改进!哈哈,谢谢我解决了这个问题。我使用了upload.single('featuredImage')不需要的额外上传功能。非常感谢你的帮助!:D
var fileupload = require("express-fileupload");
app.use(fileupload());
const upload = multer({ storage: storage, limits: { fieldSize: 10 * 1024 * 1024 } }); //10MB