Немного запутался насчет var app = express () - PullRequest
0 голосов
/ 21 декабря 2018

Я читал документы, но все еще не совсем понимаю, почему мы храним express () внутри переменной приложения.

Я знаю, что мы не можем просто вызывать методы с помощью express (). Getи .post, потому что я пытался и потерпел неудачу, но почему?

Почему это не работает, как если бы мы вызывали функцию из module.exports любого файла, который нам нужен?

Я просто очень запутался, смеется.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Что действительно происходит, когда ваш код вызывает var express = require('express'), фактически импортирует Заводской метод , называемый createApplication (исходный код здесь ).

Между тем,когда вы делаете express().get и express().post, вы ожидаете, что он вернет тот же экземпляр объекта экспресс-приложения, а это не так.Ваш код будет работать, если express использует шаблон Singleton под капотом (в результате один и тот же экземпляр возвращается при каждом вызове express()).В то время как шаблон проектирования Factory Method всегда будет создавать новый экземпляр.

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

0 голосов
/ 21 декабря 2018

express ожидает, что вы создадите объект instance и будете его использовать.Короткий способ ответить - сказать «потому что именно этого ожидают создатели экспресса от своих пользователей».

По всему вашему сценарию разработчики ожидают, что ваши методы .get и .post вызываются для общего экземпляра express.Таким образом, мы можем сказать, что вызов express() инициализирует экземпляр и возвращает объект, который вы храните в app.

Правка в ответ на ваш комментарий:

express - это функция, которая создает новый объект на основе класса

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

... в зависимости от используемого метода (например, .get), а затем использует этот экземпляр, чтобы позволить нам создать маршрут, который возвращает такие вещи, как параметры req и res вобратный вызов?

Инициализированный объект реализует методы, обратные вызовы и т. д. (например, .get, как вы описали.)

Все этов экспресс-модуле?

Все это обычный шаблон для работы с экспресс-API.

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