Рубрики
Без рубрики

Узнайте API отдыха с помощью Express.js и mysql db

Узнайте, как создать API для отдыха с помощью Express.js.

Автор оригинала: julee.

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

Структура выглядела как под диаграммой:

image.png.png

Настройка маршрутов

Маршрутизация относится к определению того, как приложение отвечает на клиентский запрос на определенную конечную точку, который является 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.

image.png.png
  1. На том же адресе, измените метод, чтобы опубликовать, нажмите тело и выберите «RAW» и на падение Меню Выберите приложение/JSON.

На теле дают подробности задания:

image.png.png

I.e:

{
"task":"create repo",
"status":"1"
}

После этого нажмите кнопку «Отправить». Это должно дать вам ответ 200 ОК

..