网址格式为www.example.com/product-name/pid_010101
。网址的第一个细分是产品名称,第二个细分是产品编号。我的应用程序路由器代码位于
app.get("/:name?/:id", routes.index);
现在我的所有网址都重定向到同一页面。例如,某些网址www.example.com/homepage/banner.html
也会重定向到www.example.com/product-name/pid_010101
需要在路由器中添加一些过滤器。 如何将网址路由到正确的网页?
答案 0 :(得分:0)
这是因为/homepage/banner.html
也符合您的路线。
因此,您还必须指定要触发的路径。
比如说你有一个欢迎页面。(/welcome/guest
)或类似的东西。
您可以添加另一条路线以上一般路线。特定于该页面。
app.get("/welcome/guest", routes.welcome);
现在这对你的所有网页来说都是太多了。所以你可以通过几种技术来避免这种情况,一种是将静态部分放在网址中说:
app.get("/product/:name?/:id", routes.product);
答案 1 :(得分:0)
我假设你的路线是:
/ coffeemaker / pid_0101222
/ bluemarker / pid_121121
等?
您可以为此OR使用正则表达式 这是方法过滤的一个例子:
app.get('/rest/:collection', function(req, res) {
return routes.rest[req.params.collection](req, res);
});
在routes对象中:
exports.rest = {
tweets: function(req, res) {
return twitter.data.load(function(data) {
return res.json(data);
}, config.site.tag, req);
},
pics: function(req, res) {
return instagram.data.load(function(data) {
return res.json(data);
}, config.site.tag, req);
},
repos: function(req, res) {
return github.data.load(function(data) {
return res.json(data);
}, req);
},
links: function(req, res) {
return delicious.data.load(function(data) {
return res.json(data);
}, config.site.tag, req);
}
};
:colection是推文,图片或链接字符串
你能列出你所有的页面吗?
也许我可以帮你解决你的路线......
答案 2 :(得分:0)
我真的不明白你的问题。 /homepage/banner.html
是静态页面吗?中间件的工作方式类似于过滤器,您只需将express.static
放在express.router
上方
app.use(express.static('public'));
...
app.use(app.router);
app.get("/:name?/:id", routes.index);
banner.html
位于(APP_DIR)/public/homepage/banner.html
答案 3 :(得分:0)
编写自己的中间件函数来处理遗留URL,并将其置于Express路由器之上。
app.use(function(req, res, next) {
if (legacySystemHandles(req.url)) {
// do legacy stuff
}
else next(); // pass to the next middleware function
});
app.use(app.router);