簡體   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