从NodeJS/ExpressJS的中间件中调用中间件 [英] Calling a middleware from within a middleware in NodeJS/ExpressJS

查看:99
本文介绍了从NodeJS/ExpressJS的中间件中调用中间件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了具有一些逻辑的标准中间件,并且根据逻辑,我需要调用一些第三方中间件.

I have created some standard middleware with some logic, and depending on the logic I need to call some 3rd party middleware.

使用app.use()添加中间件,这是我添加自定义中间件的地方.

Middleware is added using app.use(), which is where I add my custom middleware.

在我的中间件中,我不再有权访问app.use(),该如何调用中间件?

Once in my middleware I no longer have access to app.use(), how do I call the middleware?

这是一些代码:

有什么想法吗?

const customerData = (req, res, next) => {
  try {
    console.log('Started');
    if (process.env.STORE_CUSTOMER_DATA === 'true') {

        // Here is some custom middleware that doesn't belong to me
        //
        // Returns a function (I confirmed it) ready to be called with res,req, next
        //
        let externalMiddlware = logger({
          custom:true
        });

// Do I return it ? Call it ? Trying everything and nothing seems to work

        externalMiddlware(req,res,next);  // ???
    } else {

      // DO not call external middleware, will break out of if and then call next()
    }
    console.log('Finished');
    next();
  } catch (err) {
    next(err);
  }
};

module.exports = customerData;

推荐答案

我认为这应该可行,但是如果将回调委派给该其他externalMiddlware,则不应在customerData中调用next()使用此第三种中间件

I think this should work but if you delegate the callback to this other externalMiddlware you should not call next() in customerData use this 3rd middleware

所以您尝试过

const customerData = (req, res, next) => {
  try {
    console.log('Started');
    if (process.env.STORE_CUSTOMER_DATA === 'true') {
        let externalMiddlware = logger({
          custom:true
        });
        return externalMiddlware(req,res,next); 
    } else {
        return next(); // <= next moved
    }
  } catch (err) {
    next(err);
  }
};

module.exports = customerData;

这篇关于从NodeJS/ExpressJS的中间件中调用中间件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆