gpt4 book ai didi

node.js - 使用 Controller 内的 Express 和 Multer 解析请求

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:38 25 4
gpt4 key购买 nike

我的项目中已经可以进行图像上传,但是我想对其进行一些组织和整理。

理想情况下,我希望我的图像上传在函数或 Controller 内完成。我之前已经让 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);

这样的作品。问题在于,我需要对可以上传的内容设置一些限制,并在模板上显示错误消息。如果我将其与我的路线文件分开,这会更整洁。

为什么这不起作用?

我正在 Controller 中创建一个名为“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() 之后将其转发到我的另一个 Controller 。我想blog_controller.blog_create_post 然后根据请求执行我需要的所有其他操作。

谢谢您,希望能帮到您。

最佳答案

调用upload.single('imagefile')什么也不做。这相当于做:

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))
}
})
})

function (req, res, next) {}

return next();

}

记住multer只是中间件。 multer 采用的确切逻辑如 here 所示。 .

因此,如果我正确理解multer的来源,类似这样的事情可能会起作用:

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))
}
})
})

returnupload.single('imagefile')(req, res, next)

return next();

}

我没有测试过,但类似的东西。

关于node.js - 使用 Controller 内的 Express 和 Multer 解析请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49073102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com