Express.js с использованием учебника MySQL DB
Инструменты: текстовый редактор:
- Визуальный студийный код Node.js.
- Установка: https://nodejs.org/en/download/
Создание первого Node.js (Express) API:
Создайте папку для вашего приложения
- $ mkdir firtapp На терминале/командной линии перейдите в папку, созданную с предыдущего шага
- $ CD FirstApp Инициализировать проект узла:
- $ npm init Чтобы избежать флагов используйте вопрос;
- $ npm init -yes Установите Express Framework, MySQL и Body-Parser
- $ NPM Install Express -Save (экспресс-каркас)
- $ npm Установите mysql -save (для подключения к БД)
- $ npm Установите тело-парсер o Это промежуточное программное обеспечение Node.js для обработки данных JSON, RAW, TEXT и URL-URL-адресов. Настройка сервера: Nodemon поможет нам отслеживать изменения в нашем приложении, просмотрев измененные файлы и автоматически перезагрузите сервер. $ npm установить –save-dev Nodemon
Создайте файл Server.js
- $ touch server.js.
- Откройте файл Server.js и введите код ниже: var (‘Express’), (), .env.port
app.listen (порт);
Console.log («Список« Todo List Restful API »запущен в порту« + »);
- Это запускает ваше приложение на порту, который вы предоставили, когда вы запускаете сервер
MySQL DB Setup: обязательное условие: установить MySQL Community Edition
Создать БД:
CREATE DATABASE mydb;
Создать таблицу:
CREATE TABLE IF NOT EXISTS `tasks` ( `id` int(11) NOT NULL, `task` varchar(200) NOT NULL, `status` tinyint(1) NOT NULL DEFAULT '1', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE `tasks` ADD PRIMARY KEY (`id`); ALTER TABLE `tasks` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
Заполните таблицу с данными образца:
INSERT INTO `tasks` (`id`, `task`, `status`, `created_at`) VALUES (1, 'Find bugs', 1, '2016-04-10 23:50:40'), (2, 'Review code', 1, '2016-04-10 23:50:40'), (3, 'Fix bugs', 1, '2016-04-10 23:50:40'), (4, 'Refactor Code', 1, '2016-04-10 23:50:40'), (5, 'Push to prod', 1, '2016-04-10 23:50:50');
Создайте новую папку с именем приложения и внутри приложения, создайте дополнительные папки с именем контроллера, модели, маршруты.
- Внутренний контроллер Создайте новый файл с именем AppController.js
- Внутри модели создают новый файл с именем AppModel.js
- Внутренние маршруты создают новый файл с именем Orents.js
Структура выглядела как под диаграммой:
Настройка маршрутов
Маршрутизация относится к определению того, как приложение отвечает на клиентский запрос на определенную конечную точку, который является URI (или путь) и определенный метод HTTP-запроса (Get, Put, Patch, Delete)
Каждый из наших маршрутов имеет разные функции обработчика маршрута, которые выполняются при соположении маршрута.
Ниже мы определили две основные маршруты
- /задачи
- Задачи/taskid
- С разными методами «/Задачи» имеет к методам («Get» и «Post»), а «/задачи/TaskiD» получают, поставить и удалить.
Как видите, мы требовали контроллера, чтобы каждый из методов маршрутов может вызвать его соответствующей функциональной обработчике. Для этого откройте файл artaute.js в папке маршрута и вставьте фрагмент кода ниже в
'use strict'; module.exports = function(app) { var todoList = require('../controllers/todoListController'); // todoList Routes app.route('/tasks') .get(todoList.list_all_tasks) .post(todoList.create_a_task); app.route('/tasks/:taskId') .get(todoList.read_a_task) .put(todoList.update_a_task) .delete(todoList.delete_a_task); };
Давайте создадим обертку подключения DB, это позволит вам создать подключение к DB, который хранится в одном файле и может быть повторно использоваться другими модулями.
Для этого создайте новое имя файла db.js под папкой моделей $ touch db.js
Вставьте фрагмент кода ниже:
'user strict'; var mysql = require('mysql'); //local mysql db connection var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '', database : 'mydb' }); connection.connect(function(err) { if (err) throw err; }); module.exports = connection;
Настройка модели:
Теперь мы можем повторно использовать наш экземпляр БД на другие модули Теперь создайте объект задач и предоставляют функции, такие как создание новой задачи, получите все задачи, получите задачу по идентификатору, обновите задачу по идентификатору и удалить задачу по идентификатору.
Откройте AppModel.js и вставьте фрагмент кода ниже:
'user strict'; var sql = require('./db.js'); //Task object constructor var Task = function(task){ this.task = task.task; this.status = task.status; this.created_at = new Date(); }; Task.createTask = function (newTask, result) { sql.query("INSERT INTO tasks set ?", newTask, function (err, res) { if(err) { console.log("error: ", err); result(err, null); } else{ console.log(res.insertId); result(null, res.insertId); } }); }; Task.getTaskById = function (taskId, result) { sql.query("Select task from tasks where id = ? ", taskId, function (err, res) { if(err) { console.log("error: ", err); result(err, null); } else{ result(null, res); } }); }; Task.getAllTask = function (result) { sql.query("Select * from tasks", function (err, res) { if(err) { console.log("error: ", err); result(null, err); } else{ console.log('tasks : ', res); result(null, res); } }); }; Task.updateById = function(id, task, result){ sql.query("UPDATE tasks SET task = ? WHERE id = ?", [task.task, id], function (err, res) { if(err) { console.log("error: ", err); result(null, err); } else{ result(null, res); } }); }; Task.remove = function(id, result){ sql.query("DELETE FROM tasks WHERE id = ?", [id], function (err, res) { if(err) { console.log("error: ", err); result(null, err); } else{ result(null, res); } }); }; module.exports= Task;
Здесь нам требуется DB.js для импорта нашего экземпляра подключения к MySQL DB и выполнять MySQL-запросы.
Настройка контроллера
Откройте файл appcontroller.js с вашим текстом Edito и давайте глубоким погружением в кодировку. В этом контроллере мы будем писать пять (5) различных функций, а именно: list_all_tasks, create_a_task, read_a_task, ustather_a_task, delete_a_task. Мы экспортируем каждый из функций для нас для использования на наших маршрутах. Каждая из этих функций использует разные методы задач, которые мы создали ранее в AppModel.js, такие как getTaskbyId, getalltask, ustatherbyid, createTask и удаление.
Откройте AppController.js и вставьте фрагмент кода ниже
'use strict'; var Task = require('../model/appModel.js'); exports.list_all_tasks = function(req, res) { Task.getAllTask(function(err, task) { console.log('controller') if (err) res.send(err); console.log('res', task); res.send(task); }); }; exports.create_a_task = function(req, res) { var new_task = new Task(req.body); //handles null error if(!new_task.task || !new_task.status){ res.status(400).send({ error:true, message: 'Please provide task/status' }); } else{ Task.createTask(new_task, function(err, task) { if (err) res.send(err); res.json(task); }); } }; exports.read_a_task = function(req, res) { Task.getTaskById(req.params.taskId, function(err, task) { if (err) res.send(err); res.json(task); }); }; exports.update_a_task = function(req, res) { Task.updateById(req.params.taskId, new Task(req.body), function(err, task) { if (err) res.send(err); res.json(task); }); }; exports.delete_a_task = function(req, res) { Task.remove( req.params.taskId, function(err, task) { if (err) res.send(err); res.json({ message: 'Task successfully deleted' }); }); };
Ранее у нас был минимальный код для нашего сервера, который будет работать в файле Server.js. В этом разделе мы будем подключать наши обработчики (контроллеры), базы данных, созданные модели, парсер тела и созданные маршруты вместе. Откройте файл Server.js, созданный некоторое время назад и следуйте следующим шагам, чтобы поставить все вместе. По сути, вы будете заменять код на вашем Server.js с фрагментом кода из этого раздела
- Используйте органы входящих запросов BodyParser в промежуточном освещении перед обработчиками, доступными в рамках свойства REQ. Он предоставляет различные фабрики для создания потрачений. Все Hiddmwares заполнит req.bodyproperty с анализом корпусом или пустой объект ({}), если не было тела для анализа (или ошибка была возвращена).
- Зарегистрируйте наши созданные маршруты на сервере На Server.js будет иметь код ниже:
const express = require('express'), app = express(), bodyParser = require('body-parser'); port = process.env.PORT || 3000; const mysql = require('mysql'); // connection configurations const mc = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'mydb' }); // connect to database mc.connect(); app.listen(port); console.log('API server started on: ' + port); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); var routes = require('./app/routes/approutes'); //importing route routes(app); //register the route
Запустите MySQL DB SEVER BART SERVER.js $ Nodemon Sever – это запустит сервер и любые изменения, сделанные в код, будут перезапустить сервер или $ Node Server.js
- Это запускает Server.js Тестирование через почтальон
Пререквизит: установить почтальон .255006414.779778692.1531359773-1848618773-1848618773-1848618340.1531359773 Теперь, когда все сейчас подключено, давайте тестируем каждую из маршрутов и соответствующих методов. Откройте свой почтальон и введите: 1. http://localhost: 3000//Задачи в разделе Ввод URL-адреса запроса и нажмите Enter.
- На том же адресе, измените метод, чтобы опубликовать, нажмите тело и выберите «RAW» и на падение Меню Выберите приложение/JSON.
На теле дают подробности задания:
I.e:
{ "task":"create repo", "status":"1" }
После этого нажмите кнопку «Отправить». Это должно дать вам ответ 200 ОК
..