express-subdomain处理任何子域

我试图使用https://github.com/bmullan91/express-subdomain在快递中的子域路由。 以下是我的main.js和src / routes / site文件的内容。

const express = require('express'); const bodyParser = require('body-parser'); const subdomain = require('express-subdomain'); const siteRouter = require('./src/routes/site'); const app = express() app.use(express.json() ); app.use(express.urlencoded()); app.use(express.static('public')); app.use(subdomain('*.www', siteRouter)); app.get('/', function(req, res) { res.send('Homepage'); }); const server = app.listen(80,'x3.loc', function () { var host = server.address().address; var port = server.address().port; console.log('X3 listening at http://%s:%s', host, port); }); 

 const express = require('express'); let router = express.Router(); router.get('/', function(req, res) { res.send('Welcome to site'); }); module.exports = router; 

这样做的app.use(subdomain('*.www', siteRouter)); 已在https://github.com/bmullan91/express-subdomain/issues/33中build议,但不起作用。

我也尝试过只是*作为子域名,但是,导致主页瓦特/子域名,以得到一样的待遇。 我怎么能得到这个工作?

我们知道/匹配任何基本path,而不pipe子域。 所以我让你的主页中间件“子域感知”就像这样:

 app.get('/', function(req, res,next) { /* If there are any subdomains, skip to next handler, since request is not for the main home page */ if (req.subdomains.length > 0) { return next(); } res.send('Homepage'); }); 

然后我把这个子域的中间件放在主页中间件的下面 ,像这样:

app.use(subdomain('*', siteRouter));

这使得主页中间件服务于x3.loc和子域中间件的请求,为api.x3.locapi.v1.x3.locapi.x3.loc域的请求提供服务。

但在我看来,真正的解决scheme应该在模块中完成。 我认为它应该被改变,以便处理req.subdomains为空的情况,或者*与实际string匹配,而不是跳过迭代。

我很惊讶,bug 33中提出的修复方法是为记者工作的。 在我的testing中,它以相反的方式工作,即www.example.com转到子域中间件,而stat1.example.com转到主页中间件。 也许记者看到这个,换了中间件的身体。