Почему объявление функции не работает в app.use? - PullRequest
0 голосов
/ 17 июня 2019

Когда я использую foo объявление функции в app.use в качестве промежуточного программного обеспечения, компилятор, похоже, не распознает req, res, next переменные:

var express = require('express');
var path  = require('path');
var app = express();

function foo (req, res, next){ // the middleware
    console.log(req.path);
}

app.use('/', foo(req, res, next)); //ReferenceError: req is not defined

app.use('/', express.static("./public"));

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

Для сравнения, если я использую объявление функции внутри app.use код работает как задумано:

var express = require('express');
var path  = require('path');
var app = express();

app.use('/', function(req, res, next){
  console.log(req.path);
}); //ReferenceError: req is not defined

app.use('/', express.static("./public"));

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

Моего понимания недостаточно, чтобы понять, почему это ошибка

1 Ответ

0 голосов
/ 17 июня 2019

В вашем примере app.use('/', foo(req, res, next)); вызывает функцию и выполняет ее при синтаксическом анализе файла JS.

Другое «сравнение» - это объявление функции, которое не вызывается при разборе черезфайл.

Вы можете изменить код на: app.use('/', foo);, и он будет работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...