express.js Маршрутизация позиционирования кода, имеет ли это значение? - PullRequest
0 голосов
/ 02 декабря 2018

Имеет ли значение позиционирование ваших кодов маршрута?

Причина, по которой я спрашиваю, состоит в том, что, когда я размещаю свой код res.render («новый») ниже к странице, маршрутизация не работает.Если я поставлю его выше, он будет соответственно маршрутизирован.Например,

router.get("/tag/:id", controller.showBlog);
router.get("/:id/edit", controller.editBlog);

router.get("/new", function (req, res) {    
res.render("new")});

Код выше .. Не удалось выполнить маршрутизацию к new.ejs ... без ошибок, возвращает меня к индексу.

router.get("/new", function (req, res) {
res.render("new")});

router.get("/tag/:id", controller.showBlog);
router.get("/:id/edit", controller.editBlog);

Код выше .. Способен к маршрутуto new.ejs

ОБНОВЛЕНИЕ решено.

Хотя приведенный пример кода не совсем такой, как указано выше, это действительно связано с маршрутом get ("/: id") над get ("/new "), вызывающий (" /: id ") до вызова (" / new ").Другими словами, очень важно позиционирование ваших маршрутов.

Я также запустил set DEBUG = express: * & node app.js

Вот журнал рабочих желаемых результатов.

Correct Route

Вот журнал неправильного размещения моего кода маршрутизации.

Позиция, показывающая, что что-то не так.

Incorrect Route

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

Это единственные маршруты в вашем приложении?Для маршрутов, которые вы описали, это не должно иметь значения.Но учтите следующее:

app.get('/:id', function (req, res) {
  // this will match all /a, /b .. including /new
  res.end('done!');
});

app.get('/new', function (req, res) {
  // this is never called
  res.end('done!!');
});

В приведенном выше сценарии обработчик /new никогда не будет вызываться.

0 голосов
/ 02 декабря 2018

Трудно отладить только с помощью этого кода, но вам может повезти, если вы используете режим отладки Express, чтобы точно понять, почему происходит странное поведение:

Запустите приложение, используя:

DEBUG=express:* node index.js

https://expressjs.com/en/guide/debugging.html

0 голосов
/ 02 декабря 2018

Вы должны обернуть showBlog и editBog в анонимные функции.Также я не уверен насчет синтаксиса controller.showBlog или controller.showBlog()

с анонимной функцией:

router.get("/tag/:id", (req,res)=>{controller.showBlog()});
router.get("/:id/edit",(req,res)=>{controller.editBlog()});

router.get("/new", function (req, res) {    
res.render("new")});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...