• 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启动了');
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    自动重启配置文件

    dotenv 的作用,读取根目录中的 .env 文件,将配置放在 process.env

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

    添加路由

    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
    • 2
    • 3
    • 4
    • 5
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 注册中间件
    const Routes = require('../router');
    
    app.use(Routes.routes());
    
    • 1
    • 2
    • 3
    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
    • 3
    • 4
    • 5

    控制器中的操作步骤

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

    拆分 service 层

    service 层用于操作数据库

    // 操作数据库(增删改查)
    class UserService {
        async createUser({ username, password }) {
            // 数据库的操作
            return { username: username + '1', password };
        }
    }
    
    // 导出一个新对象
    module.exports = new UserService();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    数据库操作 —— 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 在配置文件 .env 中配置数据库信息
    MYSQL_HOST=localhost
    MYSQL_PORT=3306
    MYSQL_USER=root
    MYSQL_PWD=123456
    MYSQP_DB=sjkmz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    创建实体(数据模型

    使用步骤:

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    数据库增删改查 CRUD

    // 增
    数据表名.create({
        表中的字段,
    });
    // 删
    数据表名.destroy({});
    // 改
    数据表名.update({}, {});
    // 查
    数据表名.findAll(); // 查找数据表中的所有数据的所有字段
    数据表名.findAll({
        attributes: [字段名], // 查找数据表中的所有数据的指定字段
        where: {}, // 增加查询条件
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    STM32人脸识别系统设计(程序代码+论文)
    适用Unreal的本地资源检测功能发布
    Javaweb之Vue生命周期的详细解析
    KEPServerEX 6.15.132.0 发布说明
    js监听页面或元素scroll事件,滚动到底部或顶部
    项目怎么同时连接mysql和oracle
    qt下C++11的使用
    echart 雷达图
    SpringMVC简介
    JSONUtil.parse将java对象转为json时,需要在java对象中设置get、set方法
  • 原文地址:https://blog.csdn.net/cloki/article/details/128037028