【发布时间】:2018-08-06 21:49:42
【问题描述】:
我正在使用 Node、Express 和 Handlebars 以及 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>
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')));
【问题讨论】:
-
需要在 api 路由中添加中间件。
-
根据git问题,即使你使用upload.single(),你也会在
req.files而不是req.file得到文件所以尝试req.files并回发 -
@sidgujrathi 你错了我的朋友。仍然是
req.filedocs -
是的,它仍然是 req.file。无论如何尝试 req.files 并且它是未定义的。