что происходит в app.use(express.static) и app.use(требуется(«cors»)()) и какие промежуточные программы

#node.js #express #middleware

#node.js #экспресс #промежуточный слой

Вопрос:

Я начал работать с express несколько дней назад. Я действительно не понимаю, что происходит в:

 const express = require("express") const app = express()  app.use(express.static(path.join(), "public"))    app.use(require("cors")())  app.listen(3000, () =gt; console.log("running"))  

первый пример сработал для меня, но я действительно не понимаю его. и в основном я не понимаю, что происходит app.use() и что такое промежуточные программы..

кто-нибудь может мне помочь, пожалуйста? я читал много блогов, и я не получил его 🙁

Комментарии:

1. Вы можете рассматривать любой http-запрос как переход через кучу промежуточных программ по порядку. В основном запрос проходит через первое промежуточное программное обеспечение, затем второе, и так далее, пока что-то не отправит ответ. Вы можете добавить свое собственное промежуточное программное обеспечение,написав приложение.используйте((req,res, next)=gt;{любой код, который вы хотите…; далее ();})

Ответ №1:

Предыстория

Есть несколько частей, объясняющих это. Во-первых, off app.use() ожидает, что ему будет передана функция промежуточного программного обеспечения. Это была бы функция с такой сигнатурой:

 app.use(function(req, res, next) {  console.log(req.path); // log incoming request path  next(); // continue routing to other handlers });  

Он принимает другие комбинации параметров, включая начальный путь, и вы также можете передать несколько функций промежуточного программного обеспечения, и он свяжет их вместе, но суть вашего вопроса заключается в одной функции промежуточного программного обеспечения, как показано выше. Эта функция промежуточного программного обеспечения получает три аргумента req — объект входящего запроса res , объект исходящего ответа и next функцию, которую можно вызвать, если вы хотите продолжить маршрутизацию или сообщить об ошибке.

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

  1. Отправьте ответ, используя что-то вроде res.send() того, в каком случае запрос был обработан, и ответ был отправлен, и дальнейшая маршрутизация не будет выполнена.
  2. Продолжайте маршрутизацию к дальнейшим обработчикам запросов в цепочке, позвонив next() .
  3. Прервите маршрутизацию и перейдите к экспресс-обработчику ошибок, позвонив next(err) .

Промежуточное программное обеспечение express.static()

Итак, это то, что ожидается от переданной функции app.use() . Теперь давайте рассмотрим два примера, о которых вы спрашиваете. Давайте начнем с express.static() :

 app.use(express.static(path.join(), "public"))   

Во-первых, это неправильное использование express.static() . Я не совсем уверен, что вы имели в виду, но я предполагаю, что вы имели в виду что-то вроде этого:

 app.use(express.static(path.join(__dirname, "public")));   

В этом случае express.static() принимает некоторую информацию о конфигурации, которая является результирующим путем от вызова path.join(__dirname, "public") , и использует ее для создания пользовательской функции промежуточного программного обеспечения. Таким образом, вызов express.static(path.join(__dirname, "public")) возвращает функцию, которая ожидает вызова с тремя аргументами промежуточного программного обеспечения, которые мы обсуждали ранее. Это логически идентично этому:

 const publicPath = path.join(__dirname, "public"); const myStaticMiddleware = express.static(publicPath); app.use(myStaticMiddleware);  

что логически эквивалентно этому:

 const publicPath = path.join(__dirname, "public"); const myStaticMiddleware = express.static(publicPath); app.use(function(req, res, next) {  myStaticMiddleware(req, res, next); });  

Где код был разбит на отдельные шаги, чтобы вы могли видеть каждый шаг отдельно.

И, если вы еще не знали, суть express.static() промежуточного программного обеспечения заключается в том, чтобы обслуживать статические файлы из указанного каталога, если входящий запрос точно соответствует имени файла в этом указанном каталоге и имеет соответствующий тип файла.


Промежуточное программное обеспечение cors

Для вашего второго примера:

 app.use(require("cors")())  

Давайте снова разберем это на отдельные шаги:

 const cors = require("cors"); // load cors module const corsMiddleware = cors(); // create cors middleware function app.use(corsMiddleware); // register middleware with Express server  

Который может быть расширен до:

 const cors = require("cors"); const corsMiddleware = cors(); app.use(function(req, res, next) {  corsMiddleware(req, res, next); });  

Просто чтобы показать вам, что corsMiddleware вызывается с этими тремя аргументами.

Цель этого конкретного промежуточного программного обеспечения состоит в том, чтобы помочь настроить ответ на этот запрос таким образом, чтобы запросы перекрестного происхождения принимались.

Комментарии:

1. Я случайно удалил предыдущее сообщение.. :Спасибо Вам! я не ожидал такого красивого ответа. Ты все мне ясно объяснил. Да, у вас есть галочка 🙂