我想根据请求中的查询参数将传入请求重定向到不同的端点。
例如,
http://localhost:9000/?category=xyz¶m1=...¶m2=...
category
值可以是[abc,ijk,pqr,xyz]之一。
根据category
值,请求应重定向到“/ abc”,“/ ijk”,“/ pqr”,“/ xyz”保留剩余参数之一。 < / p>
因此,上述请求应成为/xyz/?param1=...¶m2=...
我是Nodejs / express的新手,我认为最好根据category
值创建不同的路由来模块化代码。
处理此类案件的理想方法是什么?
答案 0 :(得分: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');
});
请注意,中间件会为所有请求编辑网址,按请求网址添加路径app.use("/path", function(req,res,next)...
或在其中添加一些逻辑进行过滤。
答案 1 :(得分: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')
}
或者,您可以在中间件中进入并修改或创建自定义路由调度程序......