Промежуточное ПО NodeJS Express переходит к следующему без next () - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь выучить Express для NodeJS, но я сталкивался с этим:

Я пытаюсь добавить 2 промежуточных программного обеспечения, углубляющихся в URL, чтобы / user делал что-то, а root - что-то другое.Однако корневое промежуточное ПО всегда вызывается, даже если я не использую next(), и если я получаю доступ к URL "/", корневое промежуточное ПО вызывается дважды.

const express = require('express');

const app = express();


app.use('/user', (req, res, next) => {
    console.log('In user middleware ');
    res.send('<h1>Hello from User page</h1>');
});

app.use('/', (req, res, next) => {
    console.log('In slash middleware !');
    res.send('<h1>Hello from Express !</h1>');
});

app.disable('etag');
app.listen(3000);

Ответы [ 4 ]

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

Чтобы избежать такой проблемы, вы должны использовать ключевое слово return.

Когда вы отправляете файл на сервер, используйте return.

Попробуйте следующий код:

const express = require('express');

const app = express();


app.use('/user', (req, res, next) => {
    console.log('In user middleware ');
    return res.send('<h1>Hello from User page</h1>');
});

app.use('/', (req, res, next) => {
    console.log('In slash middleware !');
    return res.send('<h1>Hello from Express !</h1>');
});

app.disable('etag');
app.listen(3000);

В строках 13 и 8 я использовал возвратКлючевое слово.

Таким образом, когда вы делаете http://localhost:3000/ запрос, вы будете получать

Привет из Express!

И всякий раз, когда вы делаете http://localhost:3000/user запрос, вы получите

Привет со страницы пользователя

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

Из сообщения на GitHub.com

https://github.com/expressjs/express/issues/3260

Привет @davidgatti, мой "промежуточный программный продукт корневого пути". Я полагаю, вы говорите о nr_one.Если да, то, конечно, он выполняется при каждом запросе;app.use - система сопоставления префиксов.Каждый URL начинается с /, поэтому все, что установлено в / будет, конечно, выполнено:)

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

Хорошо, я не могу подтвердить это, но я подозреваю, что из учебника, который вы читаете, вы могли пропустить строку.

Как вы сказали, app.use - это промежуточное ПО, которое будет добавлено ко всем маршрутам

Так что, когда вы загружаете, скажем, что url там, где вы ожидаете промежуточное ПО, тогда ононе будет знать о типе запроса (опубликовать, поставить, удалить или получить запрос).

Любой альтернативой для этого может быть попытка чего-то подобного

 app.use('/user', (req, res, next) => {
     if (req.method === 'GET') {
      console.log('In user middleware ');
      res.send('<h1>Hello from User page</h1>');
} 
  });

Опять, просто проверьте и сравните его код полностью

Добавление этой ссылки из Ответ Джастинадля справки

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

это должно быть get или post, а не use

- get или post - маршруты

- use - функция промежуточного программного обеспечения

отметьте это

 const express = require('express');

  const app = express();


  app.get('/user', (req, res, next) => {
      console.log('In user middleware ');
      res.send('<h1>Hello from User page</h1>');
  });

  app.get('/', (req, res, next) => {
      console.log('In slash middleware !');
      res.send('<h1>Hello from Express !</h1>');
  });

  app.disable('etag');
  app.listen(3000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...