【发布时间】:2018-08-10 21:40:28
【问题描述】:
我已经在我的项目中上传图片,但是我想整理一下。
理想情况下,我希望我的图像上传在函数或控制器中完成。我之前已经让 multer 在我的路线文件中完成了图像上传。像这样:
route.js:
var upload = multer({
storage: multer.diskStorage({
destination: function(req, file, cb) {
cb(null, 'public/cms/images/uploads')
},
filename: function(req, file, cb) {
cb(null, randomString.generate({length: 7, charset: 'alphanumeric'}) + path.extname(file.originalname))
}
})
})
router.post('/fileupload', login_controller.requires_login, upload.single('imagefile'), test_controller.file_upload_post);
这种作品。问题在于,我需要对可以上传的内容设置一些限制,并在模板上显示错误消息。如果我把它从我的路由文件中分离出来,这会更整洁。
为什么这不起作用?
我正在一个名为“upload_image”的控制器中创建一个函数并在路由中调用它。
route.js:
router.post('/blogpost/create', blog_controller.upload_image, blog_controller.blog_create_post);
blogController.js:
exports.upload_image = function (req, res, next) {
var upload = multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/cms/images/uploads')
},
filename: function (req, file, cb) {
cb(null, randomString.generate({ length: 7, charset: 'alphanumeric' }) + path.extname(file.originalname))
}
})
})
upload.single('imagefile');
return next();
}
当我这样做时,req.body 和 req.file 是未定义的。没有图像被上传。除了我使用 req.body 或 req.file 的任何地方之外,没有错误消息并且模板呈现良好。
multer不会用表单数据修改req对象吗?这是否意味着我可以在使用 next() 后将其转发给我的另一个控制器。我想要 blog_controller.blog_create_post 然后根据请求执行我需要的所有其他操作。
谢谢,希望能帮到你。
【问题讨论】:
标签: node.js express model-view-controller multer