Javascript Express js将url路由到正确的页面
URL模式是Javascript Express js将url路由到正确的页面,javascript,node.js,express,Javascript,Node.js,Express,URL模式是www.example.com/product name/pid\u 010101。URL的第一段是产品名称,第二段是产品编号。我的应用程序路由器代码如下 app.get("/:name?/:id", routes.index); 现在,我的所有URL重定向到同一页面。例如,一些url,如www.example.com/homepage/banner.html也重定向到www.example.com/product name/pid_010101 需要在路由器中添加一些过滤器如何将
www.example.com/product name/pid\u 010101
。URL的第一段是产品名称,第二段是产品编号。我的应用程序路由器代码如下
app.get("/:name?/:id", routes.index);
现在,我的所有URL重定向到同一页面。例如,一些url,如www.example.com/homepage/banner.html
也重定向到www.example.com/product name/pid_010101
需要在路由器中添加一些过滤器如何将url路由到正确的页面?这是因为
/homepage/banner.html
也符合您的路由。
因此,还必须指定要触发的路由。
比如说你有一个欢迎页面。(/welcome/guest
)或者类似的东西。
您可以在常规路线上方添加另一条路线。特定于该页面
app.get("/welcome/guest", routes.welcome);
现在这对你所有的页面来说都是太多的工作了。因此,您可以通过两种技术来避免这种情况,一种是在url中添加一个静态部分,例如:
app.get("/product/:name?/:id", routes.product);
我想您的路线是:
/咖啡机/pid_0101222
/bluemarker/pid_121121
等等?
您可以为此或使用正则表达式 这是方法内筛选的一个示例:
app.get('/rest/:collection', function(req, res) {
return routes.rest[req.params.collection](req, res);
});
在路由对象中:
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);
}
};
:collection是tweets、pics或links字符串你能列出你所有的页面吗?
也许我可以帮你安排路线…我真的不明白你的问题。
/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
编写自己的中间件函数来处理遗留URL,并将其放置在Express router上方
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);
我的url模式“www.example.com/product name/pid_010101”我无法更改为www.example.com/product/product-name/pid_010101您可以使用url中的参数并将其映射到对象上。那么你的对象实际上就是你的控制器。因此,在您的情况下:您的名字param也可以是welcome或contact。您只需将密钥添加到routes对象,对于任何其他产品,您都可以使用其他功能。我希望你能理解。对不起,在URL的第一段中也有一些静态信息/rest/你能列出你想使用的所有页面或路由吗?/rest”不是必需的。您可以在路线上应用相同的技术。banner.html是静态资源吗?