在 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
,这样就可以在所有子域上访问了。当然,您的会话存储也需要对他们可用。
因此您可以轻松地创建一个teams
和dashboard
子域,登录一次并同时登录两个子域。希望这能说明问题。请记住,一切皆有可能,没有 "correct" 设计结构的方法。这完全取决于您希望如何分离您的关注点,是您(和您的团队)必须使用它,而不是其他人。
我想在 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
,这样就可以在所有子域上访问了。当然,您的会话存储也需要对他们可用。
因此您可以轻松地创建一个teams
和dashboard
子域,登录一次并同时登录两个子域。希望这能说明问题。请记住,一切皆有可能,没有 "correct" 设计结构的方法。这完全取决于您希望如何分离您的关注点,是您(和您的团队)必须使用它,而不是其他人。