我正在尝试使用不同的子域构建应用。我可以通过subdomain
模块获取每个子域,并且可以像/ subdomain / user一样访问。我在我的模块中获得了两个不同的URL,即使它共享相同的回调句柄来监听服务器
让我们简要看一下代码
main.js
var subdomain=require('subdomain')({ base: 'example.loc' });
var express=require('express')
var user=require('./app/user');
express()
.use(subdomain)
.use(function (req,res,next) {
console.log('This is from main');
console.log(req.url);
next();
})
.use('/subdomain/user',user)
.listen(8808)
user.js的
var app = require('express')();
var routes=require('./routes');
app
.use(routes);
module.exports=app
路由/ index.js
var express=require('express');
var router=express.Router();
router.use(function (req,res,next) {
console.log('This from user');
console.log(req.url);
next();
})
router.get('/subdomain/user',function(req,res,next){
res.send('This is from user');
});
module.exports = router;
如果我拨打网址,user.example.loc
即可获得如下记录
This is from main
/subdomain/user
This is from user
/
问题是,我丢失了使用子域模块分配的URL。 我检查了子域模块源,我找不到任何理由解决这个问题。
答案 0 :(得分:0)
快递app
实际上是Router
,Router.use()
会在处理之前从网址中删除装载路径。
来自Router
docs:
每个快速应用程序都有一个内置
app
路由器。
“mount”路径被剥离,中间件不可见 功能。这个功能的主要作用是安装中间件 无论代码的“前缀”路径名如何,都可以在没有代码更改的情况下运行。
所以,你在这里发挥作用:
router.get('/subdomain/user',function(req,res,next){
res.send('This is from user');
});
没有被调用,因为它是router
的一部分被挂载到/subdomain/user
并被剥离(如你所见)。如果您将其路径更改为/
,则应该有效:
router.get('/',function(req,res,next){
res.send('This is from user');
});