我正在 NodeJS 中构建一个 SaaS 应用程序并使用 Express 框架。网站的各个成员都有一个带有自定义子域的 url 来登录。
例如,一家名为 ABC Corp 的公司可以登录,abc.example.com
而另一家名为 Sony 的公司可以登录sony.example.com
知道如何将多个子域重定向/路由到同一个应用程序实例吗?
您可以使用express-subdomain包。假设您有一个routes
文件夹,其中包含分别导出 abc 和 sony 子域的登录路由的文件,您可以在快速服务器正在侦听的任何文件中包含以下abc.js
内容。sony.js
index.js
const subdomain = require('express-subdomain');
const express = require('express');
const app = express();
const abcRoutes = require('./routes/abc');
const sonyRoutes = require('./routes/sony');
const port = process.env.PORT || 3000;
// use the subdomain middleware
app.use(subdomain('abc', abcRoutes));
app.use(subdomain('sony', sonyRoutes));
// a simple get route on the top-level domain
app.get('/', (req, res) => {
res.send('Welcome to the Home Page!');
});
// add any other needed routes
module.exports = app.listen(port, () => {
console.log('Server listening on port ' + port);
});
然后,您的服务器将按预期运行和工作
http://example.com/
--> 欢迎来到主页!
http://abc.example.com/login
-->(您的 abc 登录页面)
http://sony.example.com/login
-->(您的 Sony 登录页面)
要在本地测试子域,您需要将它们添加到您的/etc/hosts
文件中。(它需要sudo
权限)
127.0.0.1 localhost
127.0.0.1 example.com
127.0.0.1 abc.example.com
127.0.0.1 sony.example.com
/etc/hosts
Windows 上文件的等价物是%systemroot%\system32\drivers\etc
有关在本地设置 localhost 域的更多详细信息,请查看此处
您可以使用子域包做更多事情。它接受通配符,如果您需要这样的功能,您可以使用它来检查 API 密钥。
在https://npmjs.com/package/express-subdomainexpress-subdomain
查看包的文档