我想在我的应用程序中使用不同的路由,具体取决于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中处理子域的过程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句