2016-10-03 71 views
0

我想根據請求中的查詢參數將傳入請求重定向到不同的端點。Reroute url | Nodejs | Express

例如,

http://localhost:9000/?category=xyz&param1=...&param2=...

category值可以是[ABC,IJK,PQR,XYZ]中的一個。

基於category值,請求應該重定向到 「/ ABC」, 「/ IJK」, 「/ PQR」, 「/ XYZ」 保留其餘的參數之一。

因此,上述要求應該成爲/xyz/?param1=...&param2=...

我是新來的NodeJS /快遞,我認爲這是更好地創建基於category值模塊化的代碼不同的路線。

什麼是處理這種情況的理想方法?

回答

0

爲這些值中的每一個創建一條路徑[abc, ijk, pqr, xyz]。爲了處理不同的查詢參數(?category=xyz)創建變換請求的URL中間件:

app.use(function(req, res, next) { 
    // adding category in the url path will redirect to the 
    // correct route after calling next function 
    req.url = "/" + req.query.category; 
    next(); 
}); 

假設這是一個GET請求類別的路線將是:

app.get('/abc', function(req, res) { 
    //do stuff for 'abc' category 
    res.send('abc'); 
}); 

app.get('/ijk', function(req, res) { 
    //do stuff for 'ijk' category 
    res.send('ijk'); 
}); 

app.get('/pqr', function(req, res) { 
    //do stuff for 'pqr' category 
    res.send('pqr'); 
}); 

app.get('/xyz', function(req, res) { 
    //do stuff for 'xyz' category 
    res.send('xyz'); 
}); 

注意,中間件將修改網址的所有請求,通過請求url進行過濾,添加路徑app.use("/path", function(req,res,next)...或在其中添加一些邏輯。

+0

但我不能改變傳入的請求url的模式。它將始終採用我在我的問題中指定的格式。 – user1010

+0

好的,我明白了。我將用可能的解決方案編輯我的答案。 –

0

看起來像老「頭版控制器」的格局:

app.get('/', routeByParameter) 
function routeByParameter(req, res){ 
    var category = req.params.category 
    if(category === 'abc'){ 
    return abcRoute(req, res) 
    } 
    else if(category === 'xyz'){ 
    return xyzRoute(req, res) 
    } 
} 
function abcRoute(req, res){ 
    req.send('abc') 
} 

,或者使用「頭版術語」

app.get('/', dispatcher) 
function dispatcher(req, res){ 
    var category = req.params.category 
    if(category === 'abc'){ 
    return viewAbc(req, res) 
    } 
    else if(category === 'xyz'){ 
    return viewXyz(req, res) 
    } 
} 
function viewAbc(req, res){ 
    req.send('abc') 
} 

或者,你可以得到和修改或創建一個自定義路由調度器在中間件...