Nodejs с Express: почему мое промежуточное программное обеспечение выполняется дважды Вот код - PullRequest
0 голосов
/ 30 ноября 2018

Это мой код здесь ..!

const express = require('express');
const app = express();

let myFunc = function (req, res, next) {
    console.log('This is middleware');
    next();
}

app.use(myFunc);

app.get('/', (req, res) => {
    console.log('This is get /');
    res.send('Hello World!');
});

app.listen(3000, () => {
    console.log('Server is running at port 3000....');
});

В этом я создал промежуточное программное обеспечение под названием myFunc, но вывод не такой, как я думал, это будет

Server is running at port 3000....
This is middleware
This is get /
This is middleware

Ответы [ 5 ]

0 голосов
/ 08 июля 2019

Это происходит потому, что браузер запрашивает два файла.Первый будет для /, а второй скорее всего для favicon.ico.Если вы хотите увидеть , почему это вызывается, измените одну функцию, чтобы она выглядела следующим образом:

let myFunc = function (req, res, next) {
  console.log('This is middleware', req.originalUrl);
  next();
}

Затем он будет выводить URL, который запрашивался каждый раз, когда браузер нажимаетсервер.

0 голосов
/ 08 июля 2019

Ваши статические файлы также имеют тот же URL, что и тот, который вы пытаетесь использовать.Поэтому, скорее всего, у вас будет что-то вроде этого: localhost: 3000 /: variable

Здесь этот URL будет соответствовать многим вещам

0 голосов
/ 30 ноября 2018

Как сказал @DavidWhite, app.use запускается каждый раз, когда вы запускаете приложение.в этом случае вы запускаете дважды.app.get и app.listen Вы должны использовать промежуточное программное обеспечение таким образом

const express = require('express');
const app = express();

let myFunc = function (req, res, next) {
    console.log('This is middleware');
    next();
}

app.get('/', myFunc,(req, res) => {
    console.log('This is get /');
    res.send('Hello World!');
});

app.listen(3000, () => {
    console.log('Server is running at port 3000....');
});
0 голосов
/ 30 ноября 2018

Когда вы используете app.use(myFunc);, вы применяете промежуточное ПО ко всем приложениям.И вы используете app.get и app.listen, поэтому промежуточное ПО сработало дважды.Попробуйте использовать middlewere в запросе get

0 голосов
/ 30 ноября 2018

app.use работает каждый раз, когда вы запускаете приложение.в этом случае вы запускаете дважды.app.get и app.listen

...