Автор оригинала: Olawale Aladeusi.
«Всегда есть еще один ошибок». Эллен Уллман
Этот учебник – это продолжение, откуда мы остановились с последнего поста. Если вы не прочитали мой предыдущий пост, пожалуйста, сделайте. Нажмите здесь, чтобы прочитать мой пост на создании простых API с Nodejs, Expressjs и структурой данных JS, чтобы сохранить данные.
В этом посте я объясню, как подключиться и использовать PostgreSQL База данных для хранения данных ввода в отличие от JavaScript Object DataType, мы использовали частично 1. Мы также узнаем, как написать некоторые основные [SQL] (язык запроса в структуре). SQL – это стандартный язык для хранения, манипулирования и извлечения данных в базах данных. SQL в основном является единственным языком, который вы можете использовать в запросе данных в базе данных.
Чтобы сделать это просто и так, чтобы мы могли лучше понять, как работает SQL, я не собираюсь использовать ORM (объект реляционного сопоставления) в этом посте. Проверьте это Ответ на Stackoverflow Чтобы лучше понять ORM. ORM в основном является техникой, которая позволяет нам запросить и манипулировать данные из базы данных с небольшим или нулевым знанием SQL. Пакеты ORM выставляют некоторые методы, необходимые для запроса и манипулирования данными в базе данных. У нас есть несколько пакетов ORM, которые можно использовать с нашей базой данных e.g Sequelize Отказ Вместо использования ORM мы будем использовать PG Пакет Nodejs напрямую – PG – это пакет Nodejs для взаимодействия с базой данных PostgreSQL. Использование PG Один также даст нам возможность понять некоторые основные запросы SQL, поскольку мы будем запрашивать и манипулировать данными в БД, используя RAW SQL-запросы.
Начиная
Установить PostgreSQL в вашей системе. Чтобы проверить, был ли прогресс был успешно установлен, запустите Какой PSQL
от терминала
Теперь давайте сделаем несколько твиков нашей структурой проекта. Создайте две новые папки в SRC
– ИспользованиеJSObject
и Использование DDB
Отказ Переместите предыдущие папки в SRC
к ИспользованиеJSObject
папка.
Далее создайте две новые папки внутри Использование DDB
– Контроллеры
и дБ
Отказ Создать Отражение. Джей
файл js в контроллер
папка и index.js
в дБ
папка.
Далее, создайте db.js
и .env
в корневом каталоге проекта.
Ваша новая структура проекта должна выглядеть следующим образом
project |-src |-usingDB |-controllers |-Reflection.js |-db |-index.js |-usingJSObject |-controllers |-Reflection.js |-models |-Reflection.js |-.babelrc |-.env |-db.js |-package.json |-server.js
Наконец, нам нужно установить PG и Доценв (Нам нужно это загрузить нашу среду переменные из .env
) Пакеты.
Запустите следующую команду, чтобы установить два пакета
$ npm install --save pg dotenv
Настройте базу данных
Создать базу данных Пусть создать нашу БД и назовите его Отражение_ДБ
Отказ Чтобы создать БД, мы можем использовать любой PostgreSQL-клиент, такой как Постико И мы также можем создать БД непосредственно из терминала, используя GUSEDB
команда.
$ createdb reflection_db
использовать \ l
Чтобы проверить список доступных БД из терминала
$ psql -# \l
Вы должны увидеть что-то похожее на это
Создать отражения стола Сначала позвольте сохранить URL-адрес базы данных в системной среде. URL-адрес базы данных должен быть в следующем формате Postgres://{db_username}: {db_password} @ {host}: {port}/{db_name}
E.G postgres://olawalequest @ 127.0.0.1: 5432/Refreics_DB
Отказ
Если вы не смогли установить дБ локально, простой выход – использовать любые PostgreSQL Cloud DB, например ElephinSakl Отказ Если вы используете Cloud PostgreSQL DB, скопируйте URL и используйте его вместо этого.
Сохраните URL DB в .env
Файл, расположенный в корневом каталоге.
#.env DATABASE_URL=postgres://olawalequest@127.0.0.1:5432/reflect_db
Далее нам нужно создать Размышления
стол в нашей БД. Это где мы начнем использовать PG
Пакет с базовым запросом SQL для создания таблицы.
Скопируйте и вставьте следующее в db.js
В каталоге проекта
alt.
Шаги кода:
- Импорт
Бассейн
объект изPG
Отказ Проверьте pg Документация Подробнее наобъединение
Отказ Мы используем это для подключения к нашей PostgreSQL DB. Бассейн является самым простым и распространенным способом использования PG. Вы также можете использовать их клиент API для подключения к БД. - Импорт
Доценв
отДоценв
и загрузить его, используяdotenv.config ()
– Что это делает для поиска.env
Файл в нашем проекте и загрузите его содержимое в системную среду, чтобы мы могли использовать узелProcess.env
Для доступа к этим переменным. - Мы создаем новый экземпляр
Бассейн
и пройти вConnectionString
к его конструктору. Мы используемprocess.env.database_url
чтобы получитьБаза данных_url
переменная из системной среды. - Мы слушали бассейн
соединить
Событие и консоль журналаподключен к БД
- Мы создали
CreateTables ()
Функция внутри функции – это запрос, который создаетРазмышления
стол со следующими полями;ID
– UUID DataType,Успех
– Текстовый DataType,low_point
– Текстовый DataType,take_away
– Текстовый DataType,create_date
– Timestamp DataType иmodified_date
– тип данных.
const queryText = `CREATE TABLE IF NOT EXISTS reflections( id UUID PRIMARY KEY, success TEXT NOT NULL, low_point TEXT NOT NULL, take_away TEXT NOT NULL, created_date TIMESTAMP, modified_date TIMESTAMP )`;
Что вышесказанное означает сообщить PostgreSQL DB для создания Размышления
стол, если Размышления
Таблица не существует с перечисленными полями.
- Мы называем
Бассейн
Способ запроса сQueryText
как аргумент, и он возвращаетОбещанный
Отказ Мы позвонилиPool.end ()
закрытьБассейн
Подключение к БД. - Мы создали другую функцию под названием
droptable ()
– Что это делает, чтобы удалитьОтражение
Таблица. Мы создали новый запросКапля стола, если существует отражения
Этот падение отражений стол, если она существует в БД. - Мы используем
pool.on («Удалить»)
слушатьБассейн
Удалить
Событие и использованиеProcess.exit (0)
Чтобы выйти из процесса узла. - Наконец, нам требуется
Make-Runnable
Пакет – нам нужно, чтобы это могло позвонить и любую из наших двух функций от терминала. Примечание. Вы должны потребоватьMake-Runnable
в конце. Кроме того, не забудьте установитьMake-Runnable
как проект dev-зависимость. Вы также заметите, что мы использовалитребуется
вместоИмпорт
это потому, что мы хотим только бежатьdb.js
Файл из одного терминала, и он не является непосредственно частью нашего проекта, поэтому нет смысла в том числе.
Наконец, давайте запустим CreateTables
Функция для создания наших Размышления
Таблица. Используйте следующую команду
$ node node db createTables
После запуска выше, вы должны что-то похожее на ниже
ПРИМЕЧАНИЕ. Вместо того, чтобы перейти через вышеуказанный процесс, вы также можете создавать таблицы непосредственно либо использовать любой клиент PostgreSQL или использование команд PostgreSQL на терминале.
Настройка контроллера
Скопируйте следующее и вставьте его внутри SRC/Использованиеdb/db/index.js
alt.
Шаги кода:
- Мы создали новый метод
Запрос
который принимает два аргументатекст
– Запрос текста иПармы
– Значения, требуемые потекст
Отказ Эти два аргумента – это то, что необходимо для запроса БД. Метод возвращает обещание, и мы назовем это в нашем контроллере. Нажмите здесь Подробнее о обещании JavaScript.
Чтобы сделать наш контроллер простой, он будет содержать те же пять методов, созданных в предыдущем уроке, но мы настроим его содержимое, чтобы получить значения из БД.
Скопируйте и вставьте следующее внутри SRC/ИспользованиеDB/Контроллеры/Размышления.js
alt.
Шаги кода:
- Здесь мы создаем
Отражение
объект с пятью методами –Создать ()
,getall ()
,getOne ()
,Обновление ()
иУдалить ()
Отказ Мы также используемAsync/await
Отказ Создать ()
– Мы импортировали нашу БД изSRC/ИспользованиеDB/DB/index.js
Отказ Для нашего запроса SQL мы использовалиВставить в отражения (List_Columns_here ..) Значения ($ 1, $ 2, $ 3, $ 4, 5, $ 6 ...)
– Что это делает, создает новый ряд вРазмышления
таблица и вставьте прилагаемые значения в его поля.Значения
это массив значений, которые содержат то, что мы хотим вставить в таблицу. Элементы внутриЗначения
Массив должен быть в том же порядке, что и$ 1, $ 2, $ 3, $ 4, 5, $ 6
Отказ Мы использовалиВозвращение *
Чтобы вернуть созданный строк. Помнил, что мы создалиЗапрос
Метод, который принимает в два аргументатекст
иПармы
внутриSRC/ИспользованиеDB/DB/index.js
Это где мы будем использовать его. Мы назвали методом и отправитьCreateQuery
и значения в качестве параметров. Сdb.wary
возвращает обещание, мы используемAsync/await
Чтобы наш код выглядитСладкий
Отказgetall ()
– Мы настроилиВыберите * из размышлений
Чтобы получить все строки в столе отраженийgetOne ()
– Мы используемВыберите * из отражений, где ID = 1 $
Чтобы получить один ряд от стола отражений, гдеID
указан указанный идентификатор.Обновление ()
– Чтобы обновить размышление, мы вправели DB дважды – первый – получить конкретную строку, пользователь хочет обновить, а второе запрос DB обновит ряд на основе нового ввода от пользователя. Мы используемОбновление Размышления Установить УСПЕХА = 1 $, LOW_POINE = $ 2, TINE_AWY = $ 3, MODIDIDED_DATE = $ 4, где ID = 5 $ возвращается *
обновить определенную строку в таблице.Удалить ()
– Мы используемУдалить из отражений, где id = $ 1 возвращается *
Чтобы удалить строку в столе отражения, используя строкуя бы
Обновить Server.js.
Нам нужно понять способ переключаться между использованием того, что мы сделали в предыдущий пост или используя БД. Лучший способ, которым я мог придумать, это добавить Тип
в переменной окружающей среды. Мы будем использовать это, чтобы проверить, что использовать для приложения. Если Тип === БД
Мы воспользуемся тем, что мы сделали в этом посте и если Тип === jsobject
Мы будем использовать то, что мы сделали на предыдущем посте. Теперь поставить Тип = БД
Внутри вашего .env
– Ваш .env
должен содержать две переменные сейчас База данных_url
и Тип
Отказ
Обновите свой server.js
со следующим
// server.js import express from 'express'; import dotenv from 'dotenv'; import 'babel-polyfill'; import ReflectionWithJsObject from './src/usingJSObject/controllers/Reflection'; import ReflectionWithDB from './src/usingDB/controller/Reflection'; dotenv.config(); const Reflection = process.env.TYPE === 'db' ? ReflectionWithDB : ReflectionWithJsObject; const app = express() app.use(express.json()) app.get('/', (req, res) => { return res.status(200).send({'message': 'YAY! Congratulations! Your first endpoint is working'}); }); ##################### # Existing Code # ##################### app.listen(3000) console.log('app running on port ', 3000);
Шаги кода:
- Мы установили Babel-Polyfill Пакет NPM и импортировал его – нам нужно это здесь, так что появление узла узнает
Async/await
иОбещание
Отказ - Так как нам нужно загрузить/получить
Тип
к/из системной среды, мы используемДоценв
сделать только это иProcess.env.type
используется для получения его значения. - Мы используем JavaScript Ternary Operator для установки значения отражения. Что это
Process.env.type? ReflictionWithDB: ReflectionWithJSObject;
в основном это должно назначитьОтражениеWithDB
кОтражение
ЕслиТип
или назначитьОтражениеWithJSObject
иначе.
УРА!!!! Запустите и протестируйте все ваши конечные точки.
Заключение
В этом руководстве мы узнали, как подключить приложение нашего узла к PostgreSQL, и мы также узнали, как запросить и манипулировать данными в БД. Пожалуйста, проверьте часть 1 этого поста здесь, если вы этого не сделали.
Проверьте полный код здесь
Как всегда, бросьте свои вопросы и комментарии. Не забудьте понравиться и поделиться этим постом, если вы узнали одну или две вещи.