我在快递js丢失了我的URL

时间:2014-09-21 04:15:34

标签: javascript node.js url express subdomain

我正在尝试使用不同的子域构建应用。我可以通过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。 我检查了子域模块源,我找不到任何理由解决这个问题。

1 个答案:

答案 0 :(得分:0)

快递app实际上是RouterRouter.use()会在处理之前从网址中删除装载路径。

来自Router docs

  

每个快速应用程序都有一个内置app路由器。

来自Router.use() docs

  

“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');
});