我正在使用Node.js构建一个多租户应用程序,在这个应用程序中,具有自己子域的不同客户机将访问我的应用程序的一个实例。我的问题是:
有没有一种方法可以让应用程序发现用户在哪个子域上?这样,我就可以将用户路由到正确的数据库模式(postgresql)。
提前道谢!
其他信息:
myapp.client1domain.com
myapp.client2domain.com
myapp.client3domain.com
上面的每个URL都指向应用程序的同一实例。但是,我需要知道用户在哪个子域上,以便将他们路由到正确的数据库模式。
因为HTTP/1.1或更高版本中的“host”作为“host”头反映在请求对象中。您可以执行以下操作:
const setupDatabaseScheme = (host, port) => {
// ...
};
http.createServer((req, res) => {
if (req.headers.host) {
const parts = req.headers.host.split(":");
setupDataBaseSchema(parts[0], parts[1]);
}
});
请注意,端口可能未定义;并进行其他检查,如果没有主机头或HTTP版本低于1.1,则添加错误处理。当然,您也可以作为一个express中间件来做类似的工作,或者使用任何类似的框架,这只是一个裸的node.js http。
更新:
在express中,我会做如下操作:
const getConnecitonForSchemeByHost = (host) => {
// ... get specific connection for given scheme from pool or similar
return "a connection to scheme by host: " + host;
};
router
.all("*", function (req, res, next) {
const domain = req.get("host").split(":")[0];
const conn = res.locals.dbConnection = getConnecitonForSchemeByHost(domain);
if (conn) {
next();
} else {
next(new Error("no connection for domain: " + domain))
}
})
.get("/", function (req, res) { // use connection from res.locals at further routes
console.log(res.locals.dbConnection);
res.send("ok");
});
app.use("/db", router);
req.get(“host”)
返回请求所指向的主机,例如myapp.client1domain.com
左右(将特定部分与regexp匹配),并在此基础上设置res.locals
上的属性,您可以在后续路由上使用该属性,或者在未知域的情况下退出。
如果您对http://localhost:
执行请求,上述片段将记录“通过主机:localhost连接到scheme”。
我是Node.js的新手,我在我的sql数据库2表中,一张叫做俱乐部的桌子和一张叫做球员的桌子,它们通过一对多的关系联系在一起,所以我在Flutter中创建了一个post查询,从我的查询中我想发送俱乐部的名字,俱乐部的价格将他们插入到第一个表中,并且在同一个查询中发送该队的选定球员列表,并做一个循环将他们插入到第二个表中,并为每个球员插入俱乐部的id,但是我发现我自己不知道我应该在Flutter或
问题内容: 我要实现的目标是创建一个包含多个功能的模块。 module.js: 我的问题是,这是一个对象类型,而这是一个URL字符串,但是当我遇到该问题时,它总是抱怨该类型是错误的。 在这种情况下,如何声明多个module.exports? 问题答案: 您可以执行以下操作: 要不就: 然后在调用脚本中:
预期结果: 如有任何帮助,我们将不胜感激!
问题内容: 我是事件/回调样式编程和NodeJS的新手。我正在尝试实现一个小的http服务器,它使用node-mysql模块来提供ddbb数据。 我的问题来自查询结构。由于经常有一些查询需要运行先前查询的结果,因此我无法同时(异步)运行所有查询,因此不得不等待一些结果。 我的第一种方法是同时运行所有非依赖性查询,然后循环运行,直到所有非依赖性查询都设置了一个标志,说我已经完成,这样我就可以继续处理
问题内容: 我正在 使用Express Framework 在 Node.js上 编写CMS 。在我的CMS上,我有几个用于用户,页面等的模块。 我希望每个模块的文件都放在 单独的文件夹中 , 包括视图文件 。有人知道我该怎么做到吗? 我将 swig 用作模板引擎,但如果有帮助,可以将其替换为其他东西。 问题答案: 最后更新 自Express 4.10起,框架支持多视图文件夹功能。 只需将一系列位
问题内容: 我有使用socket.io(1.5)的这个简单的node.js Servercode: 如果我运行此代码并按几次F5键,则在某些情况下会在断开旧连接之前创建新的连接。一段时间后,我认为它的心跳超时,所有连接都将关闭。查看结果: 我的问题是:这是Bug还是socket.io的正常行为?只需按F5键,如何防止连接泛滥? 最好的问候马克 问题答案: 我制作了自己的测试应用程序,能够弄清楚发生