javascript - Express.js 应用程序错误导致 Route.post() 需要回调函数但得到 [object Undefined] 错误
问题描述
我正在使用Express、EJS和 MongoDB开发一个博客应用程序(单击链接查看GitHub存储库) 。
我正在尝试使用 Multer引入添加帖子图像功能。作为 Express 的新手,我遇到了麻烦。
在utils\imageupload.js
我添加了:
const multer = require("multer");
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, './uploads/images')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + '.png')
}
});
exports.upload = multer({ storage: storage }).single('postimage');
我在仪表板路由文件中导入并使用它:
const imageUploader = require('../../utils/validation.js');
//more code
// Add Post
router.post('/post/add', imageUploader.upload, validator.addPostCheck, dashboardController.addPost);
//more code
在控制器中我有(除其他外):
exports.addPost = (req, res, next) => {
upload(req, res, function(err) {
if (err) {
console.log("There was an error uploading the image.");
} else {
res.sendStatus(200);
}
})
var form = {
titleholder: req.body.title,
excerptholder: req.body.excerpt,
bodyholder: req.body.body
};
const errors = validationResult(req);
const post = new Post();
post.title = req.body.title;
post.short_description = req.body.excerpt
post.full_text = req.body.body;
if (!errors.isEmpty()) {
req.flash('danger', errors.array())
res.render('admin/addpost', {
layout: 'admin/layout',
website_name: 'MEAN Blog',
page_heading: 'Dashboard',
page_subheading: 'Add New Post',
form: form
});
} else {
post.save(function(err) {
if (err) {
console.log(err);
return;
} else {
req.flash('success', "The post was successfully added");
req.session.save(() => res.redirect('/dashboard'));
}
});
}
}
只要该行在imageUploader.upload
控制器中,整个应用程序就会崩溃,并出现错误:Route.post() requires a callback function but got a [object Undefined] error
.
我究竟做错了什么?
解决方案
您有以下行:
const imageUploader = require('../../utils/validation.js');
validation.js
不导出upload
您在此处使用的内容:
// Add Post
router.post('/post/add', imageUploader.upload, validator.addPostCheck, dashboardController.addPost);
将导入更改为
const imageUploader = require('../../utils/imageupload.js');
应该解决问题。
关于管理仪表板控制器中的问题:由于您已经调用了 multer upload,您可以将其删除addPost
,req
现在应该包含上传的文件。
exports.addPost = (req, res, next) => {
// removed the upload code
var form = {
titleholder: req.body.title,
excerptholder: req.body.excerpt,
bodyholder: req.body.body
};
...
推荐阅读
- angular - Auth Guard 即使在登录后也无法正常工作,总是重定向到登录页面
- unity3d - 我将如何在另一个游戏对象顶部的某个地方获得一个随机位置的 vector3?
- java - java.sql.SQLException:字段“otherMenuItems_id”没有默认值
- c - 如何修复 Linux 系统调用中的分段错误?
- algorithm - 是否有一种快速算法来确定充满变量的矩阵的行列式?
- python - 如何使用 Python 捕获发送到 Web 浏览器的 JSON
- python-3.x - PycURL unsetopt 用于 WRITEFUNCTION
- python - Python Pandas 通过将值连接到列名来组合 2 个数据框
- javascript - 如何在传单地图中显示赤道?
- c# - c# / unity - 错误 CS0619 和错误 CS1061