KOA2
文章目录
手动搭建 koa2 项目
npm init -y
创建 package.json 文件git init
git 初始化- 创建
.gitignore
文件,并将不需要 git 上传的文件放上面,例如node_modules文件夹
- 安装 koa 框架
npm i koa
- 创建 src 目录,以及 app.js 入口文件
- 编写一个最简单的服务器
const Koa = require('koa');
// 实例化koa
const app = new Koa();
// app.use()注册中间件
app.use((ctx, next) => {
// ctx 是http的上下文,next 放行
// ctx.body是返回给前端的内容
ctx.body = {};
});
app.listen(3000, () => {
console.log('端口3000启动了');
});
自动重启配置文件
dotenv 的作用,读取根目录中的 .env
文件,将配置放在 process.env
中
- 安装 dotenv
npm i dotenv
- 在根目录下创建文件
.env
,编写一些环境配置的常量
APP_PORT=8000
- 在
/src/config
文件夹中创建config.default.js
文件
const dotenv = require('dotenv');
dotenv.config();
module.exports = process.env;
添加路由
- 安装路由
npm i koa-router
,并导包 - 实例化路由对象
const Router = require('koa-router');
const { API_PREFIX } = require('../config/config.default');
// 路由前缀
const router = new Router({ prefix: API_PREFIX });
- 编写路由
const Router = require('koa-router');
const { API_PREFIX } = require('../config/config.default');
const User = require('../controller/userController');
const router = new Router({ prefix: API_PREFIX });
router.post('/user/register', User.register);
module.exports = router;
- 注册中间件
const Routes = require('../router');
app.use(Routes.routes());
- 编写控制器
路由: 解析 url,分发给控制器对应的方法;
控制器: 处理不同的业务
解析 POST 请求参数
- 安装第三方插件
npm i koa-body
- 引入第三方插件
const { koaBody } = require('koa-body');
- 注册第三方插件
app.use(koaBody());
- 使用解析
// 在控制器中的第一个参数ctx中会有 ctx.request.body 字段就是post请求参数
async register(ctx, next) {
console.log(ctx.request.body);
ctx.body = ctx.request.body;
}
控制器中的操作步骤
- 获取前端传递的数据
- 操作数据库的到数据库中的数据(service 层)
- 返回结果给前端
拆分 service 层
service 层用于操作数据库
// 操作数据库(增删改查)
class UserService {
async createUser({ username, password }) {
// 数据库的操作
return { username: username + '1', password };
}
}
// 导出一个新对象
module.exports = new UserService();
数据库操作 —— sequelize 工具
sequelize 是一个 ORM 数据库工具。
ORM 是对象关系映射,将数据表当做对象处理
- 数据表映射(对应)一个类
- 数据表中的数据行(记录)对应一个对象
- 数据表的字段对应对象的属性
- 数据表的操作对应对象的方法
使用:
- 安装第三方插件
npm i sequelize
,同时还要安装驱动程序
// 不同数据库对应不同驱动
npm i pg pg-hstore # PostgreSQL
npm i mysql2 # MySQL
npm i mariadb # MariaDB
npm i sqlite3 # SQLite
npm i tedious # Microsoft SQL Server
npm i ibm_db # DB2
- 连接数据库
const { Sequelize, Model } = require('sequelize');
// 实例化 Sequelize
const seq = new Sequelize('数据库名称', '用户名', '密码', {
host: '主机地址',
dialect: 'mysql', // 数据库类型
});
// 测试数据库连接是否成功
try {
const res = seq.authenticate();
console.log(res);
} catch (err) {
console.log(err);
}
module.exports = seq;
- 在配置文件
.env
中配置数据库信息
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PWD=123456
MYSQP_DB=sjkmz
- 在
/src/db/seq.js
文件中将配置信息修改
const { Sequelize, Model } = require('sequelize');
const { MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PWD, MYSQP_DB } = require('../config/config.default');
// 实例化 Sequelize
const seq = new Sequelize(MYSQP_DB, MYSQL_USER, MYSQL_PWD, {
host: MYSQL_HOST,
port: MYSQL_PORT,
dialect: 'mysql', // 数据库类型
});
// 测试数据库连接是否成功
try {
const res = seq.authenticate();
console.log(res);
} catch (err) {
console.log(err);
}
module.exports = seq;
创建实体(数据模型)
使用步骤:
- 创建
model
文件夹存储项目所有的数据模型 - 定义数据模型
// 数据模型(实体)
const { DataTypes } = require('sequelize');
const seq = require('../db/seq');
const User = seq.define(
'模型名称',
{
// 会自动创建id
// 字段定义
/*
字段名: {
type:DataTypes.STRING,//定义数类型
allowNull: false,// 不能为空
unique: true,// 唯一的
comment: '用户名,唯一',// 注释
defaultValue: '131',// 默认值
}
*/
user_name: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
comment: '用户名,唯一',
},
},
{
// options的配置
timestamps: false, // 不会向每个模型添加 createdAt 和 updatedAt 字段
}
);
// User.sync() 如果表不存在,则创建该表(如果已经存在,则不执行任何操作)
// User.sync({ alter: true }) 这将检查数据库中表的当前状态(它具有哪些列,它们的数据类型等),然后在表中进行必要的更改以使其与模型匹配.
// 将创建表,如果表已经存在,则将其首先删除
User.sync({ force: true });
module.exports = User;
数据库增删改查 CRUD
// 增
数据表名.create({
表中的字段,
});
// 删
数据表名.destroy({});
// 改
数据表名.update({}, {});
// 查
数据表名.findAll(); // 查找数据表中的所有数据的所有字段
数据表名.findAll({
attributes: [字段名], // 查找数据表中的所有数据的指定字段
where: {}, // 增加查询条件
});