我在express js中丢失了URL

Where i lost my URL in express js

本文关键字:URL express js 我在      更新时间:2023-09-26

我试图构建一个具有不同子域的应用程序。我可以通过subdomain模块获取每个子域,并可以访问like/sudbdomain/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

路由/索引.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;

如果我调用url,user.example.loc将按如下获取日志

This is  from  main
/subdomain/user
This is from  user
/

问题是,我在哪里丢失了我使用子域模块分配的url。我检查了子域模块的来源,我找不到这个问题的任何原因。

一个express app实际上是一个Router,而Router.use()在处理之前会从url中剥离挂载路径。

来自Router文档:

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

来自Router.use()文档:

"装载"路径被剥离,对中间件不可见作用此功能的主要效果是安装了中间件无论其"前缀"路径名如何,都可以在不更改代码的情况下运行。

所以,你在这里的功能:

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