Это мой код, он построен на Node express . next («маршрут») не работает одинаково в 2 аналогичных ситуациях.
let express = require("express");
let app = express();
let router = express.Router();
router.use("/message/:id", function (req, res, next) {
console.log(typeof req.params.id);
if (req.params.id === 1 + "") {
console.log("the current id is 1");
next();
} else if (req.params.id === 2 + "") {
console.log("the current id is 2");
next("route");
} else if (req.params.id === 3 + "") {
console.log("the current id is 3");
next("router");
} else {
res.send("no id matched");
}
}, function (req, res) {
res.send("this is a scenario when id is 1");
});
router.use("/message/:id", function (req, res) {
res.send("this is a details page");
});
app.use("/", router, function (req, res) {
res.send("this is triggered by the app");
});
app.listen(8080, function () {
console.log("Please visit localhost:8080");
});
Когда я вношу URL-адрес следующим образом: "http://localhost:8080/message/2",консоль узла REPL выводит: "текущий идентификатор равен 2" , а на веб-странице отображается: "это сценарий, когда идентификатор равен 1" .
ЯЯ совершенно запутался в этом. Согласно официальным документам Express, next («маршрут») передаст управление следующему маршруту.
Поэтому я предполагаю, что на нем должно отображаться «это страница с подробностями» вместо "это сценарий, когда id равен 1" . Почему?
Чтобы попытаться выяснить больше, я также внес некоторые изменения в коды:
let express = require("express");
let app = express();
let router = express.Router();
router.get("/message/:id", function (req, res, next) {
console.log(typeof req.params.id);
if (req.params.id === 1 + "") {
console.log("the current id is 1");
next();
} else if (req.params.id === 2 + "") {
console.log("the current id is 2");
next("route");
} else if (req.params.id === 3 + "") {
console.log("the current id is 3");
next("router");
} else {
res.send("no id matched");
}
}, function (req, res) {
res.send("this is a scenario when id is 1");
});
router.get("/message/:id", function (req, res) {
res.send("this is a details page");
});
app.use("/", router, function (req, res) {
res.send("this is triggered by the app");
});
app.listen(8080, function () {
console.log("Please visit localhost:8080");
});
Я просто заменил router.use на router.get , и на этот раз, когда я вернусь "http://localhost:8080/message/2",на веб-странице отображается «это страница сведений» .
Почему в обоих сценариях результат отличается?