#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 основных основных функций:
- Сопоставление маршрутизации веб-серверов. т.е. Регистрация того, какие (req, res) => {} функции обратного вызова для вызова с какими маршрутами. Поэтому, когда ваш браузер делает запрос (идентифицируемый с помощью req.method и req.url), express вызывает соответствующий обратный вызов, предварительно зарегистрированный в app.get() app.post() методы
- Ведьма 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 () ??) на основе его абстрактной карты
Надеюсь, это имело смысл.