所以我有一个使用 nano 和 couchdb 作为后端的 node express 应用程序,它运行良好。我现在正在研究如何将其扩展到多个组织。
例如,通配符 DNS 记录允许每个客户使用https://customername.myapp.com。然后,我将检查主数据库中的 req.headers.host,并检查每个请求中的会话 cookie 等。
不过,我正在努力解决的问题是后端将如何工作。我想我理解正确的方法是为每个组织使用一个数据库,并从模板数据库中复制设计。
但如果这是正确的,我不明白这是如何使用 nano 转换为我的代码的。我目前使用这个:
var dbname = 'customer1';
var nano = require('nano')(config.dbhost);
var couch = nano.db.use(dbname);
然后在我的功能中:
couch.get(somevalue, function(err, body) {
// do stuff
});
但是当数据库本身是一个变量时,这将不起作用。我是否应该考虑将查询移至较低级别,例如 nano.get('dbname', query... 或其他?
编辑
希望有人可以给我一个示例,说明如何使用中间件根据主机标头更改数据库名称。到目前为止我有这个:
app.use(function(req,res,next) {
var couch = nano.db.use(req.header.host);
next();
});
但我不明白如何传递沙发对象(“沙发”在我的其余路由中是未知的)。我曾尝试在“下一个(沙发)”中将其传回,但这会破坏它......