Я знаю, что он делает, но не how…in Express.js , как именно работает строка ‘const app = express()’?

#node.js #express #object

#node.js #выразить #объект

Вопрос:

Это очень сложный вопрос для новичков. Это беспокоит меня уже пару недель. Я знаю, что это делает, и я смог пройти мимо этого и создать кое-что с помощью Express, но я не могу понять логику, используемую в строке ‘const app = express ()’. Я не думаю, что видел это раньше в javascript. В этом случае express — это объект, а не функция, верно? И эта строка дает переменной ‘app’ доступ ко множеству важных методов, таких как ‘listen’ и ‘get’. Но разве синтаксис здесь не заставляет думать, что значение — express() — это функция? Что именно здесь происходит.

Ответ №1:

В строке кода:

 const app = express();
  

express это функция. Если вы это сделаете typeof express , он скажет вам, что это функция.

Когда вы вызываете эту функцию, она возвращает вновь созданный объект, так что это функция, действующая как «заводская функция». Это что-то вроде конструктора, но вместо того, чтобы использовать new его, создание объекта содержится внутри функции. Функция создает новый объект, инициализирует его и возвращает.

Что может вас смущать, так это то, что express также имеет такие свойства, как:

 express.static(...)
express.json(...)
  

В Javascript функция также является объектом (вы можете думать о функции как производной от объекта) и может содержать свойства. Итак, хотя express это заводская функция, она также может иметь свойства, которые можно использовать независимо.

В этом случае express — это объект, а не функция, верно?

Да и нет, express это функция. Функции являются производными object и также могут иметь свойства. Итак, в некотором смысле, вы можете сказать, что это одновременно функция и объект, и вы можете использовать его как либо. В объектно-ориентированных терминах object — это базовый класс, а function — производный класс, поэтому функция обладает возможностями как функции, так и объекта.

И эта строка дает переменной ‘app’ доступ ко множеству важных методов, таких как ‘listen’ и ‘get’.

Строка const app = express(); создает объект приложения, который имеет собственные методы, такие как app.get() и app.post() , которые позволяют вам регистрировать обработчики маршрутов. И такой метод, как app.listen() позволяет запустить сервер. Для объекта существует много методов app .

Но разве синтаксис здесь не заставляет думать, что значение — express() — это функция?

Да, это функция. И функции в Javascript также могут иметь свойства.

Ответ №2:

Хороший вопрос,

у нас есть это:

 const express = require("express"),
const app = express()
  

«Константа express все еще используется для некоторых Express.js инструменты, связанные с настройкой вашего приложения. приложение используется в основном для всего, что создано для перемещения данных приложения и взаимодействия с пользователем «.

Ссылка: Джонатан Векслер. Приступайте к программированию с Node.js (Адреса Kindle 2619-2621). Публикации Мэннинга.

Насколько я понимаю, const express — это метод, требуемый для модуля express.

 const express = require("express")
  

Затем вы используете метод express () для создания экземпляра веб-сервера с именем «const app»

 const app = express()
  

Итак, const app на самом деле является объектом веб-сервера, созданным express.js разработчики, которые абстрагировались от 2 основных основных функций:

  1. Сопоставление маршрутизации веб-серверов. т.е. Регистрация того, какие (req, res) => {} функции обратного вызова для вызова с какими маршрутами. Поэтому, когда ваш браузер делает запрос (идентифицируемый с помощью req.method и req.url), express вызывает соответствующий обратный вызов, предварительно зарегистрированный в app.get() app.post() методы
  2. Ведьма http.createServer(<handle_function>) — это часть, которая фактически создает веб-сервер и использует его карту (см. 1) для выполнения правильной функции handle_function, предварительно определенной с помощью app.get() и app.post() . Функция handle_function обрабатывает запросы от браузера и использует req.url и req.method, чтобы определить, какой обратный вызов использовать в его map (снова см. 1, чтобы пройти полный круг.)

итак, app — это объект, который позволяет разработчику не беспокоиться о сопоставлении запросов браузера с правильными обратными вызовами дескрипторов, а также не создавать веб-сервер.

Кроме того, вы получаете кучу новых методов для приложения, которые позволяют вам делать разные вещи с вашим приложением. Вы также получаете кучу методов при определении запросов и ответов. Например, res.send()

например, браузер выполняет «GET» в «/ about», и приложение прослушивает и получает запрос (абстрагированный в объекте приложения), а затем выполняет обратный вызов (возможно, благодаря методу app.listen () ??) на основе его абстрактной карты

Надеюсь, это имело смысл.