快递js路由url到正确的页面

时间:2013-12-26 13:54:51

标签: javascript node.js express

网址格式为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

需要在路由器中添加一些过滤器。 如何将网址路由到正确的网页

4 个答案:

答案 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);