【问题标题】:Nodejs Use a middleware inside anotherNodejs 在另一个内部使用中间件
【发布时间】:2020-05-31 10:58:50
【问题描述】:

我在同一个函数中使用 2 个中间件时遇到了一些问题,我已经尝试搜索所有互联网但没有找到有用的解决方案。

验证文件

module.exports = {

create: async (req, res, next) => {
    await celebrate(options.create)(req, res, next);

    return res.status(500).json({ message: 'middleware 2'});
},

}

路由文件

routes.post('/user', UserValidator.Create ,UserController.create);

Celebre 库过滤一些基本的验证,如字符串长度、空值等。Celeb() 函数返回另一个带有 (req, res, next) 参数的函数。

当Celebre返回验证错误时,它仍然继续执行代码,所以它尝试执行下一个返回,我得到一个错误,因为返回已经发送。

当在路由中使用单独的中间件时,它可以正常工作:

routes.post('/user', celebrate(...), middleware2 ,UserController.create);

我也尝试过这种方式,但发生了同样的事情,但现在没有错误,只是返回了 middleware2 结果。

module.exports = {

create: async (req, res, next) => {
    await celebrate(options.create)(req, res, () => {
        return res.status(500).json({ message: 'middleware 2'});
    });
},

有没有办法解决这个问题?

【问题讨论】:

    标签: node.js middleware


    【解决方案1】:

    你应该试试这个结构

    // API
    app.post('/something', Middleware.validate, Controller.create)
    
    //Middleware
    const validate = (req, res, done) => {
      const errorArray = []
      const body = req.body
    
      // identifier is required, Validating as String, and length range.
      if (!_.isString(body.identifier) || body.identifier.length < 2 || body.identifier.length > 10) {
        errorArray.push({
          field: 'identifier',
          error: 70000,
          message: 'Please provide only valid \'identifier\' as string, length must be between 2 and 10.'
        })
      }
    
    
    
      if (!_.isEmpty(errorArray)) {
        return errorArray
      }
    
      done()
    }
    
    module.exports = {
      validate
    }
    
    
    // Controller
    
    const create = function (req, res) {
      return // your functionality
    }
    module.exports = {
      create
    }
    
    

    【讨论】:

    • 喜欢让庆祝库返回错误而不是完成所有工作(下一个运行),然后处理错误?
    • 是的,首先我们必须处理验证,如果验证中间件有任何错误,然后只返回错误,以便用户可以发送正确的数据......如果验证正确完成,那么我们可以转移到控制器执行我们的功能
    猜你喜欢
    • 2020-04-25
    • 2022-12-08
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    相关资源
    最近更新 更多