在我的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")
。
如何解决此问题?预先感谢。
答案 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) => {
...
});