关于node.js:如何使用Nodejs开发RESTful-API接口NodejsExpressSequelizeMySQL

30次阅读

共计 9429 个字符,预计需要花费 24 分钟才能阅读完成。

本教程手把手教你搭建一套应用 Node.js + Express + Sequelize + MySQL 构建的后端服务,详细描述通过 Node.js 与数据库通信。整个服务搭建起来后,咱们应用 Postman 对整个后端服务进行测试。本教程每段代码我都亲手测过,保障百分百没有谬误,请关上你的 terminal 追随本教程一起操作,从这里开始,成为一名后端工程师。

全栈实战教程:

  • Vue + Node.js+Expres+MySQL 开发「待办清单」APP
  • Vue + Axios + Node.js + Express 搭建带预览的「上传图片」治理后盾
  • Vue + Axios + Node.js + Express 搭建「文件上传」治理后盾
  • React + Nodejs 搭建带预览的「上传图片 / 预览」治理后盾
  • React + Axios + Node.js + Express 搭建「文件上传」治理后盾

后端实战教程:

  • 应用 Node.js + MySQL 开发 RESTful API 接口(Node.js + Express + Sequelize + MySQL)
  • 应用 Node.js + MongoDB 开发 RESTful API 接口(Node.js + Express + MongoDB)

如果你正在搭建后盾管理工具,又不想解决前端问题,举荐应用卡拉云,卡拉云是新一代低代码开发工具,可一键接入常见数据库及 API,无需懂前端,仅需拖拽即可疾速搭建属于你本人的后盾管理工具,一周工作量缩减至一天,详见本文文末。

后端局部:node.js + Express + Sequelize + MySQL

  • node.js 是整个后端的框架
  • 应用 Express 生成
  • Sequelize ORM
  • MySQL

后端局部 – node.js + Express + MySQL 后端局部

后端局部咱们应用 node.js + Express + MySQL 的形式来构建。node.js 是一个开源跨平台运行环境,它让 JavaScript 能够运行在后端服务器上,Express 是 node.js Web app 框架,其底层是对 node.js 的 HTTP 模块封装,减少路由,中间件等个性,咱们会在本教程中应用 Express 搭建 RESTful API,让前后端通过 API 进行数据交换。最初是 MySQL 数据库,最终前后端操作的数据会寄存在 MySQL 数据库中。

后端 node.js 我的项目构造

  • db.config.js 蕴含近程连贯 MySQL 数据库的登录参数
  • server.js 蕴含 Express Web 服务器初始化配置
  • models/index.js 蕴含 MySQL 数据库的配置信息
  • models/todo.model.js:蕴含 Sequelize 数据模型
  • controllers/todo.controller.js:蕴含所有增删改查操作的路由

好了,整体的后端服务器架构介绍就到这里,接下来进入实际环节,请关上你的 Terminal 咱们一起来。切记,只有亲手实际过,能力透彻了解。

装置 node.js

node.js 是一种 JavaScript 的运行环境,它能够让 JS 脱离浏览器在后端服务器上运行。本教程的后端环境应用 node.js 搭建。请先确认你的计算机中是否已装置 node.js。如果尚未装置请返回 node 官网下载安装。

装置或筹备可近程连贯的 MySQL 数据库

本教程搭建的 app 数据寄存在 MySQL 中,你能够在本机装置 MySQL,也能够筹备一台可近程连贯的 MySQL 数据库。

如果你还没有装置 MySQL 数据库,可依据《如何装置 MySQL》教程装置 MySQL 数据库,或在腾讯云之类的云服务商购买现成的 MySQL 数据库。

  • 如何近程连贯 MySQL 数据库,阿里云腾讯云容许近程连贯教程
  • 如何在 ubuntu 上装置 MySQL
  • MySQL 官网下载地址

筹备好 node.js 和 MySQL 数据库后,咱们就开始搭建后端局部。

创立 node.js App

在根目录创立 node.js 的我的项目文件夹

mkdir nodejs-express-sequelize-mysql-kalacloud
cd nodejs-express-sequelize-mysql-kalacloud

接下来配置后端的所有操作都在 nodejs-express-sequelize-mysql-kalacloud 这个文件夹中实现。

咱们先来初始化 node.js,应用 npm init 配置 package.json 文件。package.json 定义了以后我的项目所须要的各种模块以及我的项目配置信息(蕴含以后我的项目所需的开发和运行环境等信息)。

npm init
name: (nodejs-express-sequelize-mysql)
version: (1.0.0)
description: Node.js Rest Apis with Express, Sequelize , MySQL.
entry point: (index.js) server.js
test command:
git repository:
keywords: nodejs, express, sequelize, mysql, rest, api
author: kalacloud
license: (ISC)
Is this ok? (yes) yes

追随 node.js 初始化程序填写相应的 app 初始化信息。

{
  "name": "nodejs-mysql-kalacloud-com",
  "version": "1.0.0",
  "description": "Node.js Rest Apis with Express, Sequelize , MySQL.",
  "main": "server.js",
  "scripts": {"test": "echo \"Error: no test specified\"&& exit 1"},
  "keywords": [
    "nodejs",
    "express",
    "sequelize",
    "mysql",
    "rest",
    "api"
  ],
  "author": "kalacloud",
  "license": "ISC"
}

初始化程序填写实现之后,npm 会主动帮你在根目录下生成 package.json 配置文件。

接着咱们来装置我的项目中须要用到的模块:expresssequelizemysql2body-parser

在我的项目根目录 nodejs-express-sequelize-mysql-kalacloud 执行 npm 命令:

npm install express sequelize mysql2 body-parser cors --save

配置 Express Web 服务器

在根目录中,创立一个新的 server.js 文件

文件地位:nodejs-express-sequelize-mysql-kalacloud/server.js

const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");

const app = express();

var corsOptions = {origin: "*"};

app.use(cors(corsOptions));

// content-type:application/json
app.use(bodyParser.json());

// content-type:application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true}));

// 简略路由
app.get("/", (req, res) => {res.json({ message: "欢送拜访卡拉云后端服务器"});
});

// 设置监听端口
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {console.log(` 服务器运行端口:${PORT}.`);
});
  • 咱们导入了 expressbody-parsercors 模块
  • express 用于构建 Rest API 帮忙前后端实现通信。
  • body-parser 用于解析申请并创立 req.body 对象
  • cors 提供 Express 中间件
  • corsOptions 这里设置了可拜访后端的前端起源为 *,这意味着任何前端都能够接入尔后端。这样设置并不平安,为了防止「跨域问题」,先这么设置。之后请在这里限度可拜访的前端服务器。
  • 后端服务在 8080 端口上侦听指令

好,当初咱们在根目录运行指令:node server.js 启动后端服务器。

在浏览器中输出 http://localhost:8080,你能够看到后端服务器欢送信息,这表明咱们的后端服务器曾经启动。

应用 Sequelize 连贯数据库

Sequelize 是一个基于 Promise 的 Node.js ORM,目前反对 Postgres、MySQL、SQLite 和 Microsoft SQL Server。它是一个很成熟的框架,有很好的性能和速度。

咱们先来配置 Sequelize,在根目录新建 app 文件夹,而后再其中建一个 config 文件夹,咱们把 Sequelize 的配置文件放在这里,新建 db.config.js 文件,在这个文件中写入你数据库连贯的配置信息。

文件地位:nodejs-express-sequelize-mysql-kalacloud/app/config/db.config.js

module.exports = {
  HOST: "192.168.1.5",
  USER: "kalacloud",
  PASSWORD: "YOUR_PASSWORD",
  DB: "demo",
  port:3306,
  dialect: "mysql",
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  }
};
  • HOST 这里是你的 MySQL 服务器地址,如果数据库跑在本地就是 loaclhost,如果在腾讯云等云服务上,就填写云服务给你的数据库地址,比方 cdb-5nvdsixo.bj.tencentcdb.com 这是腾讯云的数据库地址款式。
  • USER 数据库登录用户名
  • PASSWORD 用户名对应的登录明码
  • DB 数据库名称
  • port 数据库近程拜访端口
  • max 最大连接数
  • min 最小连接数
  • acquire 超时工夫
  • idle 闲暇工夫

更多细节可拜访 Sequelize 参数映射表 查看更多

初始化 Sequelize

咱们将在 app / models 文件夹中初始化 Sequelize。

app/models 新建 index.js 文件并写入以下代码。

文件地位:nodejs-express-sequelize-mysql-kalacloud/app/models/index.js

const dbConfig = require("../config/db.config.js");

const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
  host: dbConfig.HOST,
  dialect: dbConfig.dialect,
  operatorsAliases: false,

  pool: {
    max: dbConfig.pool.max,
    min: dbConfig.pool.min,
    acquire: dbConfig.pool.acquire,
    idle: dbConfig.pool.idle
  }
});

const db = {};

db.Sequelize = Sequelize;
db.sequelize = sequelize;

db.todos = require("./todo.model.js")(sequelize, Sequelize);

module.exports = db;

这里的 todo.model.js 是一个用来操作数据库的 sequelize 模型,用于前端收回指令,后端承受指令后操作数据库,后文会具体解说。本文的前端配套教程《全栈实战:手把手教你用 Vue+Nodejs 开发「待办清单」app》

而后在根目录下的 server.js 文件里增加 sync() 调用的办法:

文件地位:nodejs-express-sequelize-mysql-kalacloud/server.js

const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");

const app = express();

var corsOptions = {origin: "http://localhost:8081"};

app.use(cors(corsOptions));

// content-type:application/json
app.use(bodyParser.json());

// content-type:application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true}));

// 简略路由
app.get("/", (req, res) => {res.json({ message: "欢送拜访卡拉云后端服务器"});
});

// 设置监听端口
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {console.log(` 服务器运行端口:${PORT}.`);
});

const db = require("./app/models");
db.sequelize.sync();

在结尾处增加这两行即可,你能够间接把 server.js 里的代码全删掉,而后复制下面的代码进去,保障你的我的项目代码与本教程完全一致。

定义 Sequelize Model

models 文件夹中,像这样创立 todo.model.js 文件

文件地位:nodejs-express-sequelize-mysql-kalacloud/app/models/todo.model.js

module.exports = (sequelize, Sequelize) => {
  const Todo = sequelize.define("todo", {
    title: {type: Sequelize.STRING},
    description: {type: Sequelize.STRING},
    status: {type: Sequelize.BOOLEAN}
  });

  return Todo;
};

Sequelize Model 是向 MySQL 中指定数据库的写入列,这里会主动生成 ID,title,description,status,createdAt,updatedAt 这六个列。

初始化 Sequelize 之后,咱们不须要在写任何增删改查函数,间接调就能够了。

  • 创立一个新清单:[create](https://sequelize.org/master/class/lib/model.js~Model.html#static-method-create)(object)
  • 通过 id 查找清单:[findByPk](https://sequelize.org/master/class/lib/model.js~Model.html#static-method-findByPk)(id)
  • 获取所有待办清单:[findAll](https://sequelize.org/master/class/lib/model.js~Model.html#static-method-findAll)()
  • 依据 ID 更新清单:[update](https://sequelize.org/master/class/lib/model.js~Model.html#static-method-update)(data, where: { id: id})
  • 依据 ID 删除清单:[destroy](https://sequelize.org/master/class/lib/model.js~Model.html#static-method-destroy)(where: { id: id})
  • 删除所有清单:destroy(where: {})
  • 在所有清单中按题目查找:findAll({where: { title: ...} })

是不是超级不便,这些函数,咱们会在接下来创立的「控制器」中应用。

创立控制器(controllers)

app/controllers 文件夹中,咱们来创立一个控制器 todo.controller.js,把下面 Sequelize 写入控制器来操作数据。

文件地位:nodejs-express-sequelize-mysql-kalacloud/app/controllers/todo.controller.js

const db = require("../models");
const Todo = db.todos;
const Op = db.Sequelize.Op;

// 创立并保留一条清单
exports.create = (req, res) => {
  // Validate request
  if (!req.body.title) {res.status(400).send({message: "内容不能为空"});
    return;
  }

  // 创立一条清单
  const todo = {
    title: req.body.title,
    description: req.body.description,
    stauts: req.body.stauts ? req.body.stauts : false
  };

  // 将清单保留到数据库
  Todo.create(todo)
    .then(data => {res.send(data);
    })
    .catch(err => {res.status(500).send({
        message:
          err.message || "创立清单是产生谬误。"
      });
    });
};

// 从数据库中搜寻.
exports.findAll = (req, res) => {
  const title = req.query.title;
  var condition = title ? {title: { [Op.like]: `%${title}%` } } : null;

  Todo.findAll({where: condition})
    .then(data => {res.send(data);
    })
    .catch(err => {res.status(500).send({
        message:
          err.message || "搜寻时,产生谬误。"
      });
    });
};

// 依照条目 ID 搜寻
exports.findOne = (req, res) => {
  const id = req.params.id;

  Todo.findByPk(id)
    .then(data => {if (data) {res.send(data);
      } else {res.status(404).send({message: ` 没有找到 ${id} 的清单 `
        });
      }
    })
    .catch(err => {res.status(500).send({message:  ` 查问第 ${id} 条清单时出错 `
      });
    });
};

// 更新指定 ID 清单
exports.update = (req, res) => {
  const id = req.params.id;

  Todo.update(req.body, {where: { id: id}
  })
    .then(num => {if (num == 1) {
        res.send({message: "更新胜利"});
      } else {
        res.send({message: ` 第 ${id} 条更新失败。`
        });
      }
    })
    .catch(err => {res.status(500).send({message: ` 更新第 ${id} 条清单时出错 `
      });
    });
};

// Delete a Todo with the specified id in the request
exports.delete = (req, res) => {
  const id = req.params.id;

  Todo.destroy({where: { id: id}
  })
    .then(num => {if (num == 1) {
        res.send({message: "删除胜利"});
      } else {
        res.send({message: ` 删除第 ${id} 条清单失败。`
        });
      }
    })
    .catch(err => {res.status(500).send({message: "不能删除清单:" + id});
    });
};

// 删除数据库中所有清单
exports.deleteAll = (req, res) => {
  Todo.destroy({where: {},
    truncate: false
  })
    .then(nums => {res.send({ message: ` 删除 ${nums} 条清单 ` });
    })
    .catch(err => {res.status(500).send({
        message:
          err.message || "删除所有清单时出错"
      });
    });
};

// 查看所有清单状态
exports.findAllstauts = (req, res) => {Todo.findAll({ where: { stauts: true} })
    .then(data => {res.send(data);
    })
    .catch(err => {res.status(500).send({
        message:
          err.message || "搜寻清单时出错"
      });
    });
};

至此,整个后端局部就搭建实现了,咱们把后端运行起来看看成果。

运行 Node.js Express 服务器

在 node.js 服务器根目录,运行 node server.js

控制台显示对数据库的读写,每当前端调用后端时,这里就会给出对应后端操作了写什么的 log

应用 Postman 调用 node.js 后端测试 API

后端搭建起来后,咱们能够应用 postman 来对它进行测试。

扩大浏览:

Vue + Node.js 前后端拆散搭建实战,手把手教你用 Vue+Nodejs 开发「待办清单」app

Node.js 后端搭建总结

Node.js 接管前端指令,依据前端指令操作数据库 CRUD,相当不便。学会前后端是成为全栈工程师的根底技能。但如果你只想专一在解决理论问题,不想写代码,举荐应用卡拉云,卡拉云内置多种罕用组件,无需懂前后端,仅需拖拽即可疾速生成你须要的后盾管理工具。

上面是用卡拉云搭建的数据库 CURD 后盾管理系统,只需拖拽组件,即可在 10 分钟内实现搭建。

可间接分享给共事一起应用:https://my.kalacloud.com/apps/8z9z3yf9fy/published

卡拉云可帮你疾速搭建企业外部工具,下图为应用卡拉云搭建的外部广告投放监测零碎,无需懂前端,仅需拖拽组件,10 分钟搞定。你也能够疾速搭建一套属于你的后盾管理工具。

卡拉云是新一代低代码开发平台,与前端框架 Vue、React 等相比,卡拉云的劣势在于不必首先搭建开发环境,间接注册即可开始应用。开发者齐全不必解决任何前端问题,只需简略拖拽,即可疾速生成所需组件,可一键接入常见数据库及 API,依据疏导简略几步买通前后端,数周的开发工夫,缩短至 1 小时。立刻收费试用卡拉云。

正文完
 0