[英]Using different router for different subdomains in node.js with express
我想在我的应用程序中使用不同的路由,具体取决于req.headers.host中的子域。
所以我想到了这个想法(极端简化的示例):
var express = require('express');
var domain1 = require('./routes/domain1');
var domain2 = require('./routes/domain2');
var app = express();
app.use('*', domainRouting);
function domainRouting(req, res, next){
var subdomain = req.headers.host.split('.')[0];
if(subdomain === 'domain1'){
app.use(domain1);
}
else{
app.use(domain2);
}
next();
}
//404 handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
res.send('error');
});
var server = app.listen(3001, function() {
console.log('Listening on port %d', server.address().port);
});
domain1.js:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.send('DOMAIN 1: ' + req.url);
});
module.exports = router;
domain2.js:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.send('DOMAIN 2: ' + req.url);
});
module.exports = router;
但这是行不通的,路由会被忽略,请求会跳到最后一个404处理程序中。
有什么想法吗?
您不能像在中间件中那样动态使用app.use()
。 您可以直接使用domain1(req, res, next)
而不是app.use(domain1)
来呼叫路由器。
或者,您可能会考虑使用子域之类的模块来简化在Express中处理子域的过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.