Sur*_* S3 5 javascript backend loopbackjs angular-loopback
我需要根据请求源在loopback数据源中切换数据库
例如.如果我发出请求,xyz.domain.com我需要xyz 为数据源选择数据库(我们在前端使用通配符子域,因此会有多个这样的子域).
我尝试构建中间件,从每个请求源中提取子域,并为数据源设置数据库.现在的问题是在几个同时发出的请求之后,环回服务器因"连接太多"错误而中断(可能是因为它在每个请求上创建了新的连接线程)
(我使用my-sql连接器作为数据源)
以下是我的中间件代码
'use strict';
const DataSource = require('loopback-datasource-juggler').DataSource;
const app = require('../../server/server.js');
const getSubdomain = require('../middlewares/getSubdomain.js');
module.exports = function() {
return function datasourceSelector(req, res, next) {
if (req.path !== '/api/check-realm') {
let subdomain = getSubdomain(req); // this will get me subdomain from request origin
let dataSource = new DataSource({
'host': 'localhost',
'port': 3306,
'database': subdomain ? subdomain[1] || 'default' : 'default',
'user': 'user',
'password': 'user',
'name': 'mysqlDS',
'connector': 'mysql'
}); // This creates new datasource on every request with appropriate database
let models = app.models();
models.forEach(function(model) {
if (model.modelName !== 'Email') {
model.attachTo(dataSource);
}
}); // here I am attaching all models to the newly created datasource.
app.dataSource("mysqlDS", dataSource);
}
next();
};
};Run Code Online (Sandbox Code Playgroud)
实现这一目标的其他方法也很有帮助.
app.datasources包含您在应用程序中定义的所有数据源。
例如 :
//数据源.json
{
"memo": {
"name": "memo",
"connector": "memory"
},
"admin": {
"host": "localhost",
"port": 27017,
"url": "",
"database": "test_db",
"password": "",
"name": "admin",
"user": "",
"connector": "mongodb"
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中检查子域和:
...
if (subdomain === 'admin'){
models.forEach(function(model) {
if (model.modelName !== 'Email') {
model.attachTo(app.datasources.admin);
}
});
}
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |