Node.js 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

我正在使用Node、Express、Handlebar和multer创建一个用于上传图像的应用程序。每次我提交表单时,req.file都是未定义的。我花了一整天的时间来排除故障,但不知道我做错了什么

路由器文件:

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 to
const 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