javascript - 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});
}
})
}
解决方案
我在这个包中解决了上述问题: https ://www.npmjs.com/package/node-express-multitenant 不久,我已经为此使用了异步本地存储。
推荐阅读
- python - python - 如何模拟Python列表中的局部变量?
- python - 如何为电子表格中的每一行运行 Python for 循环?
- xml - 如何检查xslt中的“if条件”?
- excel - 在 Excel 中的钟形曲线透视图上指示特定数据点
- java - BufferredWriter.write() 在 Intellij 中处理作品,但不在 jar 中
- html - ng for 循环进入其他 ng for 循环不起作用 Angular
- python - 是否可以在 Python 中使用带有 self 的变量?
- mysql - MySQL在表锁定时创建新表
- javascript - 如何确定中继查询是否为空或未加载
- android - 错误:参数类型“双?” 不能分配给参数类型“num”