繁体   English   中英

使用express将不同的路由器用于node.js中的不同子域

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM