为单个请求捕获多条路线

时间:2019-09-08 17:26:09

标签: node.js express

在我的node.js应用程序中,我有一条router.get("/*)路由用于处理所有获取请求,需要仪表板。 router.get("/dashboard")将处理。现在,即使请求路由为router.get("/*"),也总是会调用router.get("/dashboard")问题。我的代码如下:

 const express = require('express');
 const router = express.Router();

 // route for dashboard
 router.get("/dashboard", (req, res, next) => {
    res.render("index", { title: "dashboard"});
 })

 // this route will handle all get request
 router.get("/*", (req, res, next) => {

   res.render("index", {title: "index"})
})

此处,当请求为router.get("/dashboard")时,将同时调用router.get("/*)router.get("/dashboard")。然后首先调用router.get("/dashboard"),然后调用router.get("/*)

我只想在请求router.get("/*)时忽略router.get("/dashboard")

如何解决此问题?预先感谢。

3 个答案:

答案 0 :(得分:1)

您的app.get("*")将始终调用。即使您尝试调用app.get("*"),也会注意到该方法调用了两次。 这是因为,浏览器正在尝试为您的网站获取一个图标。 如果您console.log req.originalUrl,您会注意到“ /favicon.ico”是附加呼叫。

要解决此问题,您可以为您的网站定义一个图标,也可以将其禁用。

function ignoreFavicon(req, res, next) {
  if (req.originalUrl === "/favicon.ico") {
    res.status(204).json({ nope: true });
  } else {
    next();
  }
}

app.use(ignoreFavicon);

答案 1 :(得分:0)

在捕获中,所有路线都需要删除/。看起来应该像这样

router.get("*", (req, res, next) => {

   res.render("index", {title: "index"})
})

答案 2 :(得分:0)

您可以使用app.get('*',,并且还需要将其放在所有其他端点之后,如下所示:

app.get('/dashboard', (req, res) => {
  ...
});

app.get('/foo', (req, res) => {
  ...
});

app.get('*', (req, res) => {
  ...
});