2014-09-21 50 views
1

我試圖用不同的子域名構建應用程序。我可以通過subdomain模塊獲取每個子域,並可以訪問像/子域/用戶。我得到兩個不同的網址在我的模塊甚至將其共享相同的回調句柄監聽服務器我在快遞js中丟失了我的網址

讓我們看一下代碼簡要

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 

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; 

如果我所說的網址,user.example.loc即時得到日誌如下

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

的問題是,當我失去了我分配使用子域模塊的URL。 我檢查了子域模塊源,我找不到任何此問題的原因。

回答

0

一個快遞app實際上是一個RouterRouter.use()在處理它之前剝離url的裝載路徑。

Router docs

每Express應用程序有一個內置app路由器。

而且從Router.use() docs

的「摩的」路徑被剝離,是不是中間件 功能可見。此功能的主要作用是,安裝的中間件 可以在無需更改代碼的情況下運行,而不管其「前綴」路徑名。

所以,你是這裏的功能:

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

謝謝,我得到了我的網址:) – b4d4r 2014-09-21 06:42:02

相關問題