【问题标题】:Pass object initialized via express middleware to next middleware将通过 express 中间件初始化的对象传递给下一个中间件
【发布时间】:2019-10-28 00:28:04
【问题描述】:

以下是我的设置,我试图将在 express 中间件中初始化的对象传递给不同的中间件函数。在我的路由器中,调用 helper.getValues() 并得到一个错误,我无法调用未定义的函数 getValues

let helper; // no initial value

const getConfig = async () => {
    config = await service.getConfig(configName);
    helper = new Helper(config);    // Helper is correctly initialized here
};

// declare a new express app
let app = express();


app.use(async function (req, res, next) {
    try {        
        await getConfig(); // invoke the code that initializes my helper       
        next();
    } catch (e) {
        console.error(e);
    }
});


app.use('/path', MyRouter(helper)); // Pass helper to router - it's undefined in router code

我的路由器构造函数如下所示

function MyRouter(helper) {
   ...
   ... const values = helper.getValues();
}

将 getConfig 中创建的帮助程序传递给我的路由器的正确方法是什么?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    根据您的意图通过reqres 传递它。

    如果数据与请求相关,例如请求用户的身份、会话属性、geoIP 或解析的请求正文,则将其附加到 req 对象:

    如果数据与响应处理有关,例如模板/视图使用的变量或请求的响应格式,则将其附加到 res 对象。

    假设你想通过req传递它:

    req.helper = await getConfig();
    

    然后使用它:

    function router (req, res) {
        const values = req.helper.getValues();
    
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2021-03-02
      • 2017-03-28
      • 1970-01-01
      相关资源
      最近更新 更多