首页 > 解决方案 > express-http-context 在数据库回调中丢失上下文

问题描述

我们想在我们的 express (NodeJS) 支持的应用程序中添加多租户支持。我们选择 express-http-context 将租户上下文传播到子调用。我们看到一个奇怪的行为,即在数据库回调中尝试获取上下文时上下文不可用。注意:租户信息设置在请求处理的根级别。

尝试访问数据库回调中的详细信息时,租户上下文会丢失。

提前致谢。

编辑1:在此处添加代码

//app.js
const express = require('express');
const httpContext = require('express-http-context');
const app = express();
const settingsController = require('./controller/settings')

app.use(httpContext.middleware);
app.use((req, res, next) => {
    httpContext.ns.bindEmitter(req);
    httpContext.ns.bindEmitter(res);
    httpContext.set('tenant', 'falcon');
    next();
});

app.get('/api/v1/settings', settingsController.getSettings);


//SettingsController.js
const httpContext = require('express-http-context');

const mongodb = util.getDatabaseConnection();   
const getSettings = function (req, res) {
    const db = dataSource.getDb();
    console.log('Tenant id here ', httpContext.get('tenant')); //prints 'falcon'
    mongodb
        .collection('settings')
        .findOne({_id: req.param.id}, (err, doc) => {
            if(err) {
                //do more validations and other stuffs
                const tenant = httpContext.get('tenant'); //tenant is not available
                res.status(200).json({found: false});
            } else {
                res.status(200).json({found: true, data: docs});
            }
        })
}

标签: javascriptnode.jsexpressmulti-tenant

解决方案


我在这个包中解决了上述问题: https ://www.npmjs.com/package/node-express-multitenant 不久,我已经为此使用了异步本地存储。


推荐阅读