KOA2项目简单搭建

KOA2

手动搭建 koa2 项目

  1. npm init -y 创建 package.json 文件
  2. git init git 初始化
  3. 创建 .gitignore 文件,并将不需要 git 上传的文件放上面,例如 node_modules文件夹
  4. 安装 koa 框架 npm i koa
  5. 创建 src 目录,以及 app.js 入口文件
  6. 编写一个最简单的服务器
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

  1. 安装 dotenv npm i dotenv
  2. 在根目录下创建文件 .env,编写一些环境配置的常量
APP_PORT=8000
  1. /src/config 文件夹中创建 config.default.js 文件
const dotenv = require('dotenv');
dotenv.config();
module.exports = process.env;

添加路由

  1. 安装路由npm i koa-router,并导包
  2. 实例化路由对象
const Router = require('koa-router');

const { API_PREFIX } = require('../config/config.default');
// 路由前缀
const router = new Router({ prefix: API_PREFIX });
  1. 编写路由
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;
  1. 注册中间件
const Routes = require('../router');

app.use(Routes.routes());
  1. 编写控制器

路由: 解析 url,分发给控制器对应的方法;
控制器: 处理不同的业务

解析 POST 请求参数

  1. 安装第三方插件 npm i koa-body
  2. 引入第三方插件 const { koaBody } = require('koa-body');
  3. 注册第三方插件 app.use(koaBody());
  4. 使用解析
// 在控制器中的第一个参数ctx中会有 ctx.request.body 字段就是post请求参数
async register(ctx, next) {
    console.log(ctx.request.body);
    ctx.body = ctx.request.body;
}

控制器中的操作步骤

  1. 获取前端传递的数据
  2. 操作数据库的到数据库中的数据(service 层)
  3. 返回结果给前端

拆分 service 层

service 层用于操作数据库

// 操作数据库(增删改查)
class UserService {
    async createUser({ username, password }) {
        // 数据库的操作
        return { username: username + '1', password };
    }
}

// 导出一个新对象
module.exports = new UserService();

数据库操作 —— sequelize 工具

sequelize 是一个 ORM 数据库工具。
ORM 是对象关系映射,将数据表当做对象处理

  • 数据表映射(对应)一个类
  • 数据表中的数据行(记录)对应一个对象
  • 数据表的字段对应对象的属性
  • 数据表的操作对应对象的方法

使用:

  1. 安装第三方插件 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
  1. 连接数据库
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;
  1. 在配置文件 .env 中配置数据库信息
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PWD=123456
MYSQP_DB=sjkmz
  1. /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;

创建实体(数据模型)

使用步骤:

  1. 创建 model 文件夹存储项目所有的数据模型
  2. 定义数据模型
// 数据模型(实体)
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: {}, // 增加查询条件
});
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hoki802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值