我正在创建一个应用程序使用节点,快递和Handlebars和multer上传图像。每次我提交的形式,req.文件是未定义的。我花了一整天的故障排除,但不能找出我做错了什么。
路由器文件:
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>
app.js这些要求位于app.js文件中。
const express = require('express');
const exphbs = require('express-handlebars');
const path = require('path');
const passport = require('passport');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const flash = require('connect-flash');
const session = require('express-session');
const methodOverride = require('method-override');
const nodemailer = require('nodemailer');
//Set StaticFolder
app.use(express.static(path.join(__dirname, 'public')));
7条答案
按热度按时间ff29svar1#
您需要添加
upload.single('featuredImage')
作为相应路由的中间件,如下所示。const upload = multer({storage: storage});
oalqel3c2#
在我的情况下,这是与图像大小的问题。我解决了它与定义multer限制如下:
我花了很长时间才弄明白也许这能帮到某人
1cklez4t3#
请参考这个问题。它有您正在寻找的答案。
节点js multer文件上载不工作。req.file和req.files始终未定义
2w3rbyxf4#
必须通过中间件
cgvd09ve5#
一开始我也有同样的问题!但当我补充说:
......成功了。
这是我的莫特代码:
byqmnocz6#
我也遇到了同样的问题,您可以按照以下步骤解决它:
1-首先在server.js或index.js根文件中添加以下行
2-创建一个名为middleware的文件夹,并在其中创建一个名为upload.js的文件或任何您想要的名称。
3-将以下代码放入upload.js文件中
4-现在您可以在任何路由中使用此中间件。例如:
bxpogfeg7#
使用此选项: