Реализовать промежуточное программное обеспечение регистратора запросов корневого уровня
Прежде чем мы представили функцию промежуточного программного обеспечения express.static()
. Теперь пришло время посмотреть, что такое промежуточное программное обеспечение, более подробно. Функции промежуточного программного обеспечения - это функции, которые принимают 3 аргумента: объект запроса, объект ответа и следующую функцию в цикле запрос-ответ приложения. Эти функции выполняют некоторый код, который может иметь побочные эффекты для приложения, и обычно добавляют информацию к объектам запроса или ответа. Они также могут завершить цикл отправки ответа, когда выполняется какое-либо условие. Если они не отправляют ответ, по завершении они начинают выполнение следующей функции в стеке. Это вызвано вызовом третьего аргумента next()
. Больше информации в экспресс-документации .
Посмотрите на следующий пример:
function(req, res, next) {
console.log("I'm a middleware...");
next();
}
Давайте предположим, что мы смонтировали эту функцию на маршруте. Когда запрос соответствует маршруту, он отображает строку «Я - промежуточное ПО…». Затем он выполняет следующую функцию в стеке.
В этом упражнении мы собираемся создать промежуточное программное обеспечение корневого уровня. Как мы видели в задаче 4, чтобы смонтировать функцию промежуточного программного обеспечения на корневом уровне, мы можем использовать метод app.use(<mware-function>)
. В этом случае функция будет выполнена для всех запросов, но вы также можете установить более конкретные условия. Например, если вы хотите, чтобы функция выполнялась только для запросов POST, вы можете использовать app.post(<mware-function>)
. Аналогичные методы существуют для всех http-глаголов (GET, DELETE, PUT,…).
Построй простой регистратор. Для каждого запроса он должен войти в консоль с строкой следующего формата: method path - ip
. Пример будет выглядеть так: GET /json - ::ffff:127.0.0.1
. Обратите внимание , что существует пространство между method
и path
и тир разделением path
и ip
окружен пространством с обоего сторон. Вы можете получить метод запроса (http-глагол), относительный путь маршрута и IP-адрес вызывающего абонента из объекта запроса, используя req.method
, req.path
и req.ip
Не забудьте вызвать next()
когда вы закончите, иначе ваш сервер застрянет навсегда. Обязательно откройте «Журналы» и посмотрите, что произойдет, когда поступит какой-то запрос…
Подсказка: Express оценивает функции в порядке их появления в коде. Это верно и для промежуточного программного обеспечения. Если вы хотите, чтобы он работал для всех маршрутов, он должен быть установлен перед ними.
Build a simple logger. For every request, it should log to the console a string taking the following format: method path - ip
. An example would look like this: GET /json - ::ffff:127.0.0.1
. Note that there is a space between method
and path
and that the dash separating path
and ip
is surrounded by a space on both sides. You can get the request method (http verb), the relative route path, and the caller’s ip from the request object using req.method
, req.path
and req.ip
. Remember to call next()
when you are done, or your server will be stuck forever. Be sure to have the ‘Logs’ opened, and see what happens when some request arrives.
Note: Express evaluates functions in the order they appear in the code. This is true for middleware too. If you want it to work for all the routes, it should be mounted before them.