В настоящее время я прохожу пятую неделю курса иммерсивного веб-разработки General Assembly, и мы используем Node и Express уже несколько недель. Для тех из вас, кто не знает, Node и Express — это фреймворки, которые позволяют писать бэкенд-код на JavaScript. Если, как и я до того, как мы начали учиться, вы все еще не понимаете различия между интерфейсом и сервером, вы можете прочитать мой следующий пост об этом, ссылка на который будет здесь, как только он будет завершен!

В любом случае, несмотря на несколько недель и несколько проектов практики, я все еще теряюсь в лабиринте маршрутов и требований, приложений и модулей, которые есть в Express. Экспресс-приложения включают в себя множество папок, взаимодействующих друг с другом, и если вы не свяжете их правильно, ничего не получится. Кроме того, здорово, что Node поставляется с таким количеством пакетов, которые обеспечивают отличные сокращения кода, но иногда они могут скрыть от вас фактическое назначение того, что делает ваш код, если вы не полностью понимаете, что каждый пакет делает для вас.

Цель этого поста в блоге — объяснить тем, кто изучает Express так же, как и я, сбит с толку, и им трудно понять все, что происходит, когда они настраивают маршруты и требуют модулей. В процессе я надеюсь также прояснить некоторые вещи для себя. Я не собираюсь подробно рассказывать о настройке или давать конкретные инструкции, потому что документация делает это довольно хорошо. Я постараюсь больше объяснить, что на самом деле происходит, когда мы пишем простые слова, а за кулисами происходят магически сложные вещи. Я определенно приветствую любые отзывы или исправления. Итак, приступим!

Маршруты, требования, модули, О БОЖЕ!

Express и Node полны библиотек и приложений, которые помогут вам быстро выполнять задачи, но в процессе вы часто можете упустить то, что вы на самом деле делаете. Если вы не планируете создавать свое экспресс-приложение вручную, все начинается с экспресс-генератора, который создаст готовый скелет для вашего приложения, включая ссылки на все наиболее часто используемые пакеты (хотя вы все равно будете необходимо загрузить их), маршруты и папки просмотра.

Модули

Модули — это просто ярлыки кода. Это фрагменты повторно используемого кода, которые помогают выполнять задачи быстрее и эффективнее. У Колина Тоха есть отличный пост, объясняющий некоторые из очень удобных служебных методов, о которых позаботится Lodash. Иногда может быть сложно поддерживать все ваши модули в порядке и помнить, какой код из каких модулей извлекается. Проверка документации всегда лучший способ.

Что вам нужно?

После того, как вы загрузите свои модули, первая часть любого документа Express обычно представляет собой список команд, с помощью которых вы загружаете (также известные как «требуется») модули, которые вы будете использовать в своем приложении. Вы можете думать о «требованиях» в приложении Express, как о ссылках на таблицы стилей или источниках скриптов в HTML-документе. Вы просто создаете связь между своим приложением и модулями, которые вы загрузили в папку node_modules. Как и на HTML-странице, ваше приложение не будет знать, что вы используете определенный модуль или библиотеку, если вы никогда не связываете его явно. Чтобы усложнить ситуацию, вам нужно убедиться, что вы включили этот список ссылок в каждый файл, которому потребуется доступ к определенному модулю. Если вы хотите использовать Lodash или Mongoose в одном из ваших файлов маршрутов, вам нужно будет потребовать его там, а также в вашем основном файле app.js.

Используй или потеряешь

Некоторые из загруженных вами модулей нужно будет активировать или настроить, чтобы вы могли «использовать» их в другом месте вашего приложения. Большая часть этого уже настроена для вас Express Generator. Если это не так, в их документации обычно указано, какое имя метода вам нужно вызвать, чтобы они заработали.

Маршруты

Здесь все усложняется, по крайней мере, для меня. Действия маршрута определены в вашей папке маршрутов, но пути, которые запускают эти действия, определены в вашем app.js, представления, которые вы можете или не можете загружать, когда путь активируется в еще одной папке, и информация для базы данных вы можете или не можете получить доступ, будет жить в нескольких других разных местах. Попытка сохранить все эти файлы и папки, а также связи между ними могут быть трудными; Я постараюсь объяснить это как для вас, так и для себя, так просто, как только смогу.

Так что же такое маршруты? По сути, ваше приложение берет URL-адрес из браузера пользователя, считывает путь в конце, а маршрут сообщает вашему приложению, что делать в зависимости от того, к какому пути осуществляется доступ. Поэтому, если вы перейдете на http://sitename.com/home, ваше приложение будет искать маршрут, связанный с путем /home, и запускать любой код, который там находится.

Как ни странно, вы определяете путь своего маршрута не в самом файле маршрута, а в основном файле app.js. Как и в случае с модулями, вам нужно будет получить (опять же, «требовать») свои маршруты, а затем «использовать» их. Когда вы говорите своему приложению «использовать» их, вы указываете URL-путь (например, «/results», «/home» и т. д.), который приведет к этому маршруту, а также конкретный файл маршрутов, который будет запускаться, когда этот путь пробит. Итак, в следующем примере мы сообщаем приложению: «Когда будет выбран путь «/bands», перейдите к файлу маршрута «bands» и запустите любой код, который там находится».

Итак, мы знаем, что когда пользователь получает доступ к sitename/bands, код в файле маршрута bands.js будет запущен. Но какой код мы пишем в файле маршрута? Express Generator автоматически настроит минимальный минимум, необходимый для запуска маршрута, но, как и в случае с нашим файлом app.js, нам нужно «требовать» любые дополнительные модули, которые мы будем использовать.

Итак, настроить маршрут довольно просто, но что на самом деле делают маршруты? Насколько я могу судить по тому, как мы использовали Express до сих пор в классе, маршруты в основном используются для одной из двух вещей: для отображения разных страниц из вашей папки представлений или для связи с внешней базой данных и изменения или возврата данных. что там живет. Давайте рассмотрим их один за другим.

МАРШРУТЫ И ПРОСМОТЫ

В вашем приложении, скорее всего, будет несколько разных страниц, которые вы захотите отображать в разное время. Вам понадобится папка маршрутов, которая сообщает вашему приложению, какую страницу загружать в зависимости от того, какой URL запрашивается в браузере. Например, на сайте может быть «домашняя» страница, страница «обо мне» и страница «контакты», и вы можете захотеть, чтобы эти страницы загружались, когда URL-адреса «/», «/about» и «/contact пути были разбиты. В этом случае файлы HTML для дома, о и контакта будут находиться в папке представления, а маршруты будут связываться с этими файлами и отображать их в соответствии с выбранным маршрутом. Помните, что путь (то, что следует после обратной косой черты в URL-адресе, т.е. «/about» или «/contact»), который запускает каждое из этих событий, определяется в app.js, когда вы «используете» файл маршрутов.

МАРШРУТЫ И БАЗЫ ДАННЫХ

Однако на занятиях мы почти никогда не использовали маршруты для загрузки страниц; вместо этого они позволили нам взаимодействовать с базой данных, взаимодействовать с информацией там, а затем отправлять ее обратно в наш внешний интерфейс, чтобы мы могли отображать информацию для пользователя. Настройка вашей базы данных и работа с имеющейся информацией — это больше, чем я могу вместить в этот пост (но, возможно, позже я напишу еще один пост о том, как использовать Mongoose и MongoDB в сочетании с Express, так что проверяйте, если это звучит полезно). тебе). Сейчас я просто хочу поговорить о том, как вы используете маршруты для передачи информации обратно во внешний интерфейс.

Приведенный выше код находится в файле маршрута с именем «bands.js», который «используется» приложением app.js в сочетании с путем «/bands» (прокрутите два раздела вверх, если вы уже забыли, как указать, какой маршрут файлы запускаются в зависимости от того, по каким путям — я же говорил вам, что это будет сложно!). В приведенном выше коде мы сообщаем маршрутизатору: «Когда пользователь запрашивает URL-адрес, оканчивающийся на путь «/bands», получить доступ к коллекции «Band» в нашей базе данных, найти все внутри нее и отправить ее в браузер в Формат JSON».

Чтобы понять это предложение, требуется много распаковки: Band — это переменная Mongoose, созданная в другом месте нашего приложения, которая по существу указывает на базу данных, к которой мы пытаемся получить доступ, а вторая часть из .find, по сути, просто говорит Mongoose найти все записи в коллекции полос и отправить эту информацию в виде ответа JSON в браузер. JSON означает «обозначение объектов JavaScript», и это просто стандартный формат, используемый для кодирования данных и их передачи. Вот как выглядит ответ JSON, если вы не знакомы с этим термином:

По сути, это похоже на объект JavaScript, верно? И он действует как один тоже. Итак, когда мы говорим, что Express извлекает эту информацию из базы данных и отправляет ее в браузер, что это значит? Куда он на самом деле идет и что нам делать с ним дальше?

Вот тут-то и появляются наши маршруты. Если мы обслуживаем наш проект узла на порту 3000 и переходим к локальному хосту нашего браузера: 3000/bands, мы увидим красивый список диапазонов в нашей базе данных. Имеет ли это смысл? Когда браузер видит «/bands», он переходит к app.js и спрашивает: «Этот путь где-то определен?» Он видит написанную нами ранее строку «app.use(«/bands», «./routes/bands.js»)» и знает, что ему нужно просмотреть файл маршрута «bands.js», чтобы определить, что сделать. В этом файле он видит чепуху Mongoose, которую мы скопировали выше, переходит к коллекции Band в нашей базе данных, извлекает всю информацию и отправляет ее обратно в формате JSON. Вуаля!

Заключение

Если вы все еще в замешательстве, вы не одиноки. После того, как я написал это примерно наполовину, я понял, что определенно откусил больше, чем мог проглотить за один пост в блоге. Я не смог полностью обсудить или прояснить, как работают маршруты, даже не коснулся Mongoose, а также не коснулся промежуточного программного обеспечения, что является еще одной очень болезненной для меня темой. Похоже, мне просто нужно подождать и написать вторую часть, чтобы, надеюсь, наконец-то разобраться с безумием Экспресса!