我希望根据请求中的查询参数将传入的请求重定向到不同的端点。
例如,
http://localhost:9000/?category=xyz¶m1=...¶m2=...
category值可以是abc,ijk,pqr,xyz之一。
根据category值,应该将请求重定向到"/abc“、"/ijk”、"/pqr“、"/xyz”中的一个保持其余参数。
因此,上面的请求应该成为/xyz/?param1=...¶m2=...。
我是Nodejs/express的新手,我认为最好基于category值创建不同的路径来模块化代码。
处理这类个案的理想方法是甚麽?
发布于 2016-10-03 13:43:03
为这些值[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)...的请求url进行筛选,或者在其中添加一些逻辑。
发布于 2016-10-03 14:07:40
看起来像旧的“头版控制器”模式:
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')
}或者,您可以进入并修改或在中间件中创建自定义路由调度器.
https://stackoverflow.com/questions/39832817
复制相似问题