Сохранение Node API с помощью PostgreSQL без помощи ORM, таких как sequenceize.

Что мы имеем в виду, когда используем термин «постоянный»? Постоянство в нашем повседневном английском языке — это «продолжение следствия после того, как его причина удалена», в контексте хранения данных в базе данных постоянство относится к способности записи сохраняться после завершения процесса, с помощью которого она была создана. .

В отличие от других руководств по NodeJS, в которых сохранение данных осуществляется с помощью MongoDB, вместо этого мы будем использовать PostgreSQL. А также, чтобы убедиться, что мы получили основы разработки Restful API с NodeJs и PostgreSQL, мы будем избегать использования ORM (объектно-реляционное сопоставление), читайте об этом подробнее 👉 здесь.

Предпосылки :

  1. Пройдите мой курс по написанию базового NodeJs API с помощью Express и Es6, вы можете найти его ниже 👇
  2. Иметь базовые знания синтаксиса SQL-запросов, так как это руководство не охватывает их.
  3. Базовые знания NodeJs и Express
  4. Установите NodeJs, вот загрузка ссылка на сайт
  5. Установите PostgreSQL, вот загрузка ссылка на сайт
  6. После установки найдите приложение pgAdmin и начать работу, поставляется вместе с PostgreSQL. pgAdmin — это платформа для администрирования и разработки с графическим интерфейсом для PostgreSQL (это означает, что она помогает сделать наше управление БД намного проще и удобнее)

Начиная:
В этом уроке мы будем создавать API для реестра классов, мы начнем с создания и настройки нашей базы данных.

Следуйте инструкциям ниже, чтобы создать базу данных с помощью pgAdmin:
1. Double click on the PostgreSQL server.

2. Right-lick on Login Roles, assuming you have none and select new login role.

3. Type your preferred Role name, mine is school_reg.

4. Move to the next tab *Definition* and set your password for this role, mine is school_reg.

5. Click on *OK* to save.

6. Right-click on Databases and select New Database.

7. Type Database name in the space for Name, mine is school_register.

8. Select owner of Database, here we would select the login role or user we created, remember mine is school_reg.

9. Click *OK* to save.

Изображение выше иллюстрирует вышеописанный процесс, увеличьте масштаб, чтобы лучше видеть:

Изображение, иллюстрирующее создание базы данных

После создания нашей базы данных нам нужно будет создать таблицы и отношения между таблицами, говоря гиковскими терминами, давайте создадим нашу схему. Пока у нас будет только одна таблица, наша student таблица, в которой будет основная информация об ученике, поскольку приложение растет, если мы решим расшириться, нам придется создавать дополнительные таблицы.

Настройка проекта:

  1. Мы бы начали с создания папки нашего проекта, я назвал ее AwesomeNodepostgresда, я знаю, что это длинное имя, вы можете выбрать более короткое имя.

  2. Инициализируйте свой проект как проект узла, запустив npm init из командной строки, когда вы нашли путь к папке проекта из командной строки. Обратитесь к последнему уроку, чтобы понять, как это сделать, если вы еще этого не сделали.

Выполнив описанные выше шаги, ваш каталог проекта должен выглядеть так, если вы используете мой любимый редактор кода. VScode.
vscode выстрел

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

  1. Экспресс, с которым мы уже сталкивались в предыдущей статье
  2. Для связи с нашей базой данных postgres нам понадобится пакет с именем узел-postgres.
  3. Чтобы убедиться, что наш сервер всегда прослушивает изменения и перезапускает наше приложение, мы также установим еще один пакет. нодмон.

Чтобы установить первые два пакета, убедитесь, что вы находитесь в папке проекта из командной строки. Затем выполните следующие команды;

npm install express pg --save npm install nodemon --save-dev

--save-dev здесь означает сохранить и использовать nodemon только во время разработки в качестве зависимости разработки, поэтому во время производства nodemon не будет использоваться.

Теперь, чтобы установить соединение с базой данных, мы создадим папку servicesа внутри папки мы создадим файл с именем db.js.
Так внутри services/db.jsвведите следующий код;

const pg = require('pg'); const config = { user: 'school_reg', //this is the db user credential database: 'school_register', password: 'school_reg', port: 5432, max: 10, // max number of clients in the pool idleTimeoutMillis: 30000,
}; const pool = new pg.Pool(config); pool.on('connect', () => { console.log('connected to the Database');
});

Теперь, чтобы создать наши таблицы, введите следующий код под предыдущим блоком кода;

const createTables = () => { const schoolTable = `CREATE TABLE IF NOT EXISTS students( id SERIAL PRIMARY KEY, student_name VARCHAR(128) NOT NULL, student_age INT NOT NULL, student_class VARCHAR(128) NOT NULL, parent_contact VARCHAR(128) NOT NULL, admission_date VARCHAR(128) NOT NULL )`; pool.query(schoolTable) .then((res) => { console.log(res); pool.end(); }) .catch((err) => { console.log(err); pool.end(); });
};

Чтобы создать нашу таблицу с помощью этого скрипта, нам нужно найти способ запустить этот код в командной строке. мы можем использовать для этого другой пакет, который называется make-runnableустановить пакет; npm install make-runnable --saveпосле установки вернитесь к своей кодовой базе внизу страницы, добавьте следующее;

pool.on('remove', () => { console.log('client removed'); process.exit(0);
}); //export pool and createTables to be accessible from an where within the application
module.exports = { createTables, pool,
}; require('make-runnable');

Теперь, чтобы создать наше приложение, давайте напишем скрипт на нашем package.json файл, который при запуске из командной строки создаст для нас таблицу. На вашей package.json файл найдите скрипты объекта, замените то, что находится внутри объекта, кодом ниже;

"create": "node ./services/db createTables"

Перейдите в свою командную строку, все еще находясь в каталоге проекта, и запустите;

На изображении ниже показано, что происходит, когда вы это делаете, а также внимательно посмотрите, где вы могли бы разместить только что созданную таблицу в приложении pgAdmin.

запустить npm запустить создать

просмотр только что созданной таблицы

Когда создание нашей базы данных и таблицы завершено, пришло время начать сохранять данные в нашей базе данных и извлекать эти сохраненные данные.

Прежде чем мы это сделаем, давайте создадим наш index.js файл, который будет содержать наш сервер и экспресс-коды, в папке проекта создайте файл с именем index.js. Введите следующий код в наш index.js.

const express = require('express'); const app = express(); const port = process.env.PORT || 3000; // Add route code Here app.get('/', (req, res) => { res.send('Welcome to Our SCHOOL API'); }); app.listen(port, () => { console.log(`We are live at 127.0.0.1:${port}`); });

Чтобы запустить наше приложение, давайте добавим два дополнительных кода в наш scripts объект, найденный на package.json файл, прежде чем создавать, удалите эти два;

"dev": "nodemon index.js", "start": "node index.js",

скрипты для запуска

Теперь, чтобы запустить наш проект, мы будем использовать опцию nodemon, поэтому любые изменения, которые мы вносим, ​​мы сможем заметить. Попробуйте понаблюдать за тем, как nodemon перезапускает сервер, когда вы вносите изменения и сохраняете их.

запуск сервера nodemon

Когда наш сервер запущен, перейдите по ссылке, которую прослушивает ваш сервер, 127.0.0.1:3000 как указано на моем. Откройте приложение почтальона и сделайте GET-запрос по ссылке.

почтальон

Теперь давайте создадим маршруты, которые будут обрабатывать создание студентов и выборку всех студентов. После первого маршрута на вашем index.js файл, добавьте следующие коды, эти коды будут обрабатывать, вставляя студента, извлекая всех студентов. Чтобы иметь возможность вставлять в нашу базу данных, нам нужно было бы иметь возможность выбирать значение, переданное в тело любого запроса, и для этого мы будем использовать пакет узла, называемый анализатор тела.

После установки вышеуказанного пакета добавьте следующий код в наш index.js прежде чем продолжить наши маршруты. Добавьте следующее ниже const app = express();

const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyparser.urlencoded({extended:true}));

Теперь давайте продолжим наши маршруты;

app.get('/student', (req, res) => {
pool.connect((err, client, done) => { const query = 'SELECT * FROM students'; client.query(query, (error, result) => { done(); if (error) { res.status(400).json({error}) } if(result.rows < '1') { res.status(404).send({ status: 'Failed', message: 'No student information found', }); } else { res.status(200).send({ status: 'Successful', message: 'Students Information retrieved', students: result.rows, }); } }); });
}); app.post('/student', (req, res) => { const data = { name : req.body.studentName, age : req.body.studentAge, classroom : req.body.studentClass, parents : req.body.parentContact, admission : req.body.admissionDate, } pool.connect((err, client, done) => { const query = 'INSERT INTO students(student_name,student_age, student_class, parent_contact, admission_date) VALUES($1,$2,$3,$4,$5) RETURNING *'; const values = [data.name, data.age, data.classroom, data.parents, data.admission]; client.query(query, values, (error, result) => { done(); if (error) { res.status(400).json({error}); } res.status(202).send({ status: 'SUccessful', result: result.rows[0], }); }); });
});

Запустите свое приложение и перейдите по ссылке на почтальоне, на этот раз перейдите по ссылке 127.0.0.1/student чередуя GET и POST для каждого запроса. Взгляните на скриншоты ниже и сделайте то же самое, если вы не знаете, как тестировать с почтальоном.

Сначала вы устанавливаете информацию заголовка для почтальона:
информация заголовка

После этого мы бы установили значения тела, следуйте скриншоту ниже:
конфигурация тела

Затем вы нажимаете «Отправить», и у вас есть результат.
результат

Теперь, чтобы выполнить запрос на получение, измените тип запроса на GET, а затем нажмите «Отправить».

получить

Волла!!! Теперь у нас есть API для получения и отправки в базу данных.

Примечание : Наличие нашего маршрута, сервера и экспресс-приложения в одном файле — плохая практика, пометьте этот репозиторий проектов на GitHub, разветвите и отправьте PR, чтобы узнать, как это сделать, пока я продолжаю над ним работать, или вы можете попробовать поработать над ним самостоятельно и отправить push-запрос.

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

app.get('/student/:id', (req,res) => { const id = req.params.id; res.send(`Student ${id} profile`);
});

когда мы делаем запрос к новой конечной точке, которую мы получим;

индивидуальный студент

ТАК попробуйте заполнить код, чтобы выбрать студента, чей идентификатор вы ссылаетесь из базы данных.

Ниже прикреплен репозиторий GitHub, как и было обещано. Не забудьте поставить звездочку. Спасибо.

В нашем следующем уроке мы рассмотрим, как мы можем аутентифицировать наши маршруты, чтобы без надлежащей аутентификации пользователи не могли получить доступ к маршрутам.

Оформить заказ здесь:AwesomeNodePostgres

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *