因为是学习笔记,所以写的东西可能比较散,但我会尽量把功能完整的串起来,后期可能会修改很多次。本篇学习笔记主要记录用户注册的完整过程、有父子关系的表的联合查询、文件上传,所有的示例写的比较简单,大家见谅~~~
包准备:
npm i koa
- npm i nodemon //自动重启工具
- npm i dotenv //系统配置工具
- npm i koa-router
- npm i koa-body
- npm i sequelize --save //基于 promise 的 Node.js ORM 数据库工具 支持最低版本5.7
- npm i mysql2 --save //
项目解构解释:
app--http服务配置、config--系统配置、constant--常量配置、controller--业务逻辑实现层、db--数据库配置、middleware--抽离各种复用中间件、model--数据表实例层进行建表操作、router--路由层控制接口跳转、service--数据库服务层进行数据库相关操作、fileSave--保存上传的文件
1.http服务拆分:src/app/index.js
const Koa = require("koa");
const app = new Koa();
// 路由添加步骤:导入包 实例化对象 编写路由 注册中间件
const userRouter = require("../router/user.route");
const KoaBody = require('koa-body')
app.use(KoaBody()) //注意:要在路由注册之前注册,不要漏了小括号
app.use(userRouter.routes());
// 进行统一的错误处理
const errorHandler = require('./errorHandler')
app.on('error', errorHandler)
module.exports = app
项目主体配置及env配置
//main.js
const { APP_PORT } = require("./config/config.default");
const app = require('./app')
app.listen(APP_PORT, () => {
console.log("node服务已在3000端口启动");
});
//.env
APP_PORT=8006
MYSQL_HOST = localhost
MYSQL_PORT = 3306
MYSQL_USER = root
MYSQL_PWD = 123456
MYSQL_DB = nodeTest
//src/config/config.default.js
const dotenv = require('dotenv')
dotenv.config()
//progress:正在执行的node进程 env:环境变量
module.exports = process.env
数据库连接:
//拆分数据库连接方法: src/db/sequelize.js
const { Sequelize } = require("sequelize");
const {
MYSQL_HOST,
MYSQL_PORT,
MYSQL_USER,
MYSQL_PWD,
MYSQL_DB,
} = require("../config/config.default");
const seq = new Sequelize(MYSQL_DB, MYSQL_USER, MYSQL_PWD, {
host: MYSQL_HOST,
dialect: "mysql",
});
// 测试数据库连接
// seq
// .authenticate()
// .then(() => {
// console.log("数据库链接成功");
// })
// .catch((err) => {
// console.log("数据库链接失败", err);
// });
module.exports = seq;
2.接口实现:
以用户注册为例,接口实现、代码拆分、封装逻辑如下图所示:
1.koa-router监听路由并匹配到相关接口,对携带参数进行处理