Routes.js
以下代码有效。
var upload= multer({ storage: storage})
app.post('/upload', [ upload.any(), function(req, res) {
console.log(req.body) // form fields
console.log(req.files) // form files
res.status(204).end()
}]);
但是,我想调用一个控制器方法,它位于我的文件uploadController.js
所以我这样做,下面。
app.post('/upload', controllers.uploadFiles.upload, [ upload.any(), function(req, res) {
console.log(req.body) // form fields
console.log(req.files) // form files
res.status(204).end()
}]);
然而,发生的事情是我的控制器被调用但是上传部分失败了,即下面的部分没有被调用。
console.log(req.body) // form fields
console.log(req.files) // form files
res.status(204).end()
总之,他们中的任何一个(闷热者或控制者)都在工作,他们俩都没有。 这可能有什么问题?
更新
尝试以下方法。只有控制器被调用。没有完成文件上传。
app.post('/upload', controllers.dataUpload.upload, [ upload.any(), function(req, res, next) {
console.log(req.body) // form fields
console.log(req.files) // form files
next()
}]);
答案 0 :(得分:1)
您还没有从第一个控制器调用next
。致电res.end()
后,执行结束。如果您希望执行继续到下一个路由匹配,则必须在第一个中间件上调用next()
。
您可以在指南中详细了解路由和中间件:https://expressjs.com/en/guide/routing.html
以下是一些可能相关的引用:
您需要调用next
函数,以便调用下一个控制器:
多个回调函数可以处理路径(确保指定下一个对象)。
当您在res
对象上调用方法时,将终止执行并忽略下一个控制器:
下表中响应对象(res)上的方法可以向客户端发送响应,并终止请求 - 响应周期。如果没有从路由处理程序调用这些方法,则客户端请求将保持挂起状态。
答案 1 :(得分:0)
致@squgeim帮助我完成概念部分。根据他的指导,我想出了这个问题。以下是工作代码。
<强> Routes.js 强>
var uploadStorage = multer({ storage: storage})
app.post('/upload', controllers.uploadController.uploadFile, [uploadStorage.any(), function(req, res, next) {
console.log(req.body) // form fields
console.log(req.files) // form files
res.status(204).end()
}]);
<强> uploadController.js 强>
module.exports = {
uploadFile: (req, res, next) => {
//Do whatever you want over here.
next()
},
}
所以基本上,在app.post
参数#2中,我调用控制器,做我想做的任何事情,然后调用next()
继续前进到app.post
参数#3调用multer和上传文件。