Почему функция Express принимает в качестве аргументов и запрос, и ответ? - PullRequest
0 голосов
/ 23 мая 2018

Я новичок в node.js и знакомлюсь с Express.Следующий код - мой источник путаницы:

var server = http.createServer(handleRequest);

function handleRequest(req, res) {
  var path = req.url;

  switch (path) {
  case "/n":
    return renderPage_1(req, res);
  default:
    return renderPage_2(req, res);
  }
}

Я понимаю, что серверу необходимо принять HTTP-запрос (req).Однако, если мы возвращаем ответ, почему ответ также является аргументом в функции обратного вызова?Я продолжаю сталкиваться с тупиком, думая, что это связано с областью действия объекта ответа, хотя я не уверен.

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

Бест, Абид

1 Ответ

0 голосов
/ 23 мая 2018

Я думаю, что ответ на ваш вопрос заключается в том, что именно так авторы Express решили внедрить библиотеку.На высоком уровне express - это всего лишь облегченная оболочка, которая упрощает создание http-сервисов на базе промежуточного программного обеспечения с NodeJS.Причина, по которой оба объекта req & res передаются каждой функции промежуточного программного обеспечения, заключается в том, что на практике веб-службы редко могут выполнить весь запрос за один шаг.Часто службы создаются как слой промежуточного программного обеспечения и формируют ответ в несколько этапов.

Например, у вас может быть функция промежуточного программного обеспечения, которая ищет в запросе информацию об идентификаторе и извлекает любые соответствующие метаданные идентификатора при установке некоторой аутентификации.конкретные заголовки ответа.Затем запрос может быть передан в промежуточное ПО авторизации, которое использует извлеченные метаданные, чтобы определить, авторизован ли текущий пользователь и может ли пользователь завершить запрос досрочно, закрыв поток ответов.Если пользователь авторизован, то запрос будет продолжен до следующего компонента промежуточного программного обеспечения и т. Д. Чтобы это работало, каждая функция промежуточного программного обеспечения (шаг стека) должна иметь возможность доступа к информации из запроса, а также записи информации в ответ,Express обрабатывает это, передавая объекты запроса и ответа в качестве аргументов функции промежуточного программного обеспечения, но это только один из способов сделать это.

Теперь авторы могли бы по-разному реализовать библиотеку так, чтобы предполагался каждый обработчик маршрута.вернуть объект, такой как { status: 200, content: "Hello, world" }, вместо вызова методов для объекта ответа, но это было бы вопросом соглашения, и вы могли бы довольно легко написать обертку вокруг express, которая позволит вам написать ваши сервисы, как это, если хотите.

Надеюсь, это поможет.

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