在 meanjs 中使用子域

Working with subdomains in meanjs

我想在 meanjs 应用程序中创建一个子域。

main- example.com

subdomain1- team.example.com

subdomain2- dashboard.example.com

团队和仪表板是 meanjs 中的模块。

我该怎么做?

子域用于创建单独的网站。您可以在每个子域下配置多个均值应用程序。他们可以完全独立。事实上,一个可以是一个平均应用程序。另一个可以是 wordpress 站点。

无法从您的 Web 应用程序内部完成不同子域的配置。

这是一种在同一台服务器上托管不同平均应用程序的方法。有域的通配符条目。然后使用Nginx代理进行子域映射。

这是一个使用子域的 MEAN 堆栈示例。所有这些 运行 都是单独的 Express 应用程序。一个用于 Angular 应用程序,它服务于一个静态目录,它总是重定向到 index.html 以便 HTML5mode 是可能的,一个用于后端 API,它使用 Mongoose 和 MongoDB 服务于Angular 申请的内容。另外两个子域提供静态库资源和图像。它作为一个应用程序一起工作:

var express = require('express'),
    vhost = require('vhost'),
    path = require('path'),
    stack = express();

stack.use(vhost('lib.example.org', require(path.join(__dirname, 'lib/index'))));
stack.use(vhost('img.example.org', require(path.join(__dirname, 'img/index'))));
stack.use(vhost('app.example.org', require(path.join(__dirname, 'app/index'))));
stack.use(vhost('api.example.org', require(path.join(__dirname, 'api/index'))));

stack.listen(80);

根据对 Vishal 的回答和此回答的评论进行编辑,一个会话共享示例。

考虑 运行ning app.example.org 上的以下应用:

var express = require('express'),
    mongoose = require('mongoose'),
    session = require('express-session'),
    cookie = require('cookie-parser'),
    store = require('connect-mongo')(session),
    app = module.exports = express();

mongoose.connect(options);

app.use(cookie());

app.use(session({
    name: 'global',
    secret: 'yoursecret',
    store: new MongoStore({
        mongooseConnection: mongoose.connection
    }),
    resave: true,
    saveUninitialized: true,
    rolling: true,
    cookie: {
        path: '/',
        domain: 'example.org',
        maxAge: null,
        httpOnly: false
    }
}));

app.use('/', function (req, res) {
    req.session.appValue = 'foobar';
    res.status(200).end();
});

以下应用 运行在 api.example.org 上运行:

var express = require('express'),
    mongoose = require('mongoose'),
    session = require('express-session'),
    cookie = require('cookie-parser'),
    store = require('connect-mongo')(session),
    api = module.exports = express();

mongoose.connect(options);

api.use(cookie());

api.use(session({
    name: 'global',
    secret: 'yoursecret',
    store: new MongoStore({
        mongooseConnection: mongoose.connection
    }),
    resave: true,
    saveUninitialized: true,
    rolling: true,
    cookie: {
        path: '/',
        domain: 'example.org',
        maxAge: null,
        httpOnly: false
    }
}));

api.use('/', function (req, res) {
    res.send(req.session.appValue).end();
});

现在,当您第一次访问 app.example.org 时,会设置会话值,之后访问 api.example.org 时,会检索该值并作为响应发送。就那么简单。另外看看这个问答:Using Express and Node, how to maintain a Session across subdomains/hostheaders这里的关键是把cookie的域设置为example.org,这样就可以在所有子域上访问了。当然,您的会话存储也需要对他们可用。

因此您可以轻松地创建一个teamsdashboard 子域,登录一次并同时登录两个子域。希望这能说明问题。请记住,一切皆有可能,没有 "correct" 设计结构的方法。这完全取决于您希望如何分离您的关注点,是您(和您的团队)必须使用它,而不是其他人。