Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express js将url路由到正确的页面_Javascript_Node.js_Express - Fatal编程技术网

Javascript Express js将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 需要在路由器中添加一些过滤器如何将

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


需要在路由器中添加一些过滤器如何将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是静态资源吗?