gpt4 book ai didi

javascript - 我在express js中丢失了我的URL

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:56 25 4
gpt4 key购买 nike

我试图构建一个具有不同子域的应用程序。我可以通过 subdomain 模块获取每个子域,并且可以像/subdomain/user 一样访问。我在模块中得到两个不同的 url,即使它共享相同的回调句柄来监听服务器

让我们简单看一下代码

ma​​in.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

routes/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;

如果我调用 url,user.example.loc 我会收到如下日志

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

问题是,我在哪里丢失了使用子域模块分配的网址。我检查了子域模块源代码,没有找到此问题的任何原因。

最佳答案

express app 实际上是一个 Router,并且 Router.use() 在处理之前从 url 中去除挂载路径。

来自Router docs :

Every express application has a builtin app router.

来自Router.use() docs :

The "mount" path is stripped and is not visible to the middleware function. The main effect of this feature is that mounted middleware may operate without code changes regardless of its "prefix" pathname.

所以,你在这里工作:

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

关于javascript - 我在express js中丢失了我的URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com