Node Express - 导致控制器呼叫失败的multer,反之亦然

时间:2017-03-31 15:47:27

标签: express multer

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()
                }]);

2 个答案:

答案 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和上传文件。