我正在尝试创建一个多租户应用程序(saas),其中每个客户端都有自己的数据库.
我的情况是:
我创建了一个中间件来确定客户端是基于子域的,然后从通用数据库中检索客户端的数据库连接信息.我不知道如何为此客户端建立连接对象,以便能够在我的控制器中使用.我应该在中间件或控制器中执行此操作吗?如果它在模型中,我如何传递连接字符串和参数(我可以使用会话,但我不知道如何从模型内访问会话).
我该怎么做?
这是我的中间件的一个例子,我想创建一个mongoose连接,我想动态(传递客户端的连接信息):
function clientlistener() {
return function (req, res, next) {
console.dir('look at my sub domain ' + req.subdomains[0]);
// console.log(req.session.Client.name);
if (req.session.Client && req.session.Client.name === req.subdomains[0]) {
var options = session.Client.options;
var url = session.Client.url
var conn = mongoose.createConnection(url, options);
next();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何从控制器内部访问此连接对象?还是从模特?
谢谢.
我的朋友,不幸的是我找不到任何关于如何在节点js express mongoose app中实现bluebird promise库的例子.
我的应用程序设置为猫鼬模型,控制器和路由在不同的文件中.
但是用mongoose实现它,我只是无法弄明白.
所以请有人告诉我它是如何使用的.请看下面.
//express controller Article.js
var mongoose = require('mongoose'),
errorHandler = require('./errors'),
Article = mongoose.model('Article');
exports.list = function(req, res) {
Article.find().sort('-created').populate('user', 'displayName').exec(function(err, articles) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.jsonp(articles);
}
});
};
Run Code Online (Sandbox Code Playgroud)
//猫鼬模型
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
/**
* Article Schema
*/
var ArticleSchema = new Schema({
created: {
type: Date,
default: Date.now
},
title: {
type: String,
default: …Run Code Online (Sandbox Code Playgroud)