hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

栏目: 数据库 · 发布时间: 5年前

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

  • hapi框架,用 官网 的简介来说就是:Hapi是构建应用程序和服务的丰富框架,它使开发人员能够专注于编写可重用的应用程序逻辑,而不是花时间构建基础设施。
  • 用自己的话简单来说,就是个类似express,koa之类的node服务基础框架。
  • 此篇博客是在阅读过掘金小册的 《基于 hapi 的 Node.js 小程序后端开发实践指南》 并实践操作后,以此记录实践过程和踩过的坑。感兴趣读者可支持阅读掘金小册原版的内容。

Joi数据校验

1.安装joi

更多校验规则参考文档: https://www.npmjs.com/package...

npm i @hapi/joi

2.配合swagger

只需要在路由的config配置校验信息,如./routes/test.js 新增多一条测试接口

{
    method: "GET",
    path: `/${GROUP_NAME}/get`,
    handler: (request, h) => {
      return { data: request.query };
    },
    config: {
      tags: ["api", GROUP_NAME],
      description: "测试get提交",
      notes: "配置Implementation说明文",
      validate: {
        query: {
          num: Joi.number()
            .integer()
            .required()
            .description("数字")
            .error(new Error("num参数错误"))
        }
      }
    }
  },

3.swagger接口文档

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

Sequence的使用

1.安装

此案例链接 mysql 数据库,所以安装mysq2

npm i sequelize-cli -D
npm i sequelize
npm i mysql2

2.使用到的目录和文件

├── config                       # 项目配置目录
|   ├── config.js                # 数据库连接的配置(区分开发/生产环境)
|   ├── index.js                 # 暴露部分配置信息给app.js使用
├── models                       # 数据库 model
|   ├── index.js                 # 数据库连接的样板代码
├── migrations                   # 数据迁移的目录
├── seeders                      # 数据填充的目录
├── .env                         # 配置

3.env配置数据库信息

注意需要在本地mysql中创建对应的数据库, 如:hapi_db

# 域名配置信息
HOST = 127.0.0.1
PORT = 3303
# MySQL 数据库连接配置信息
MYSQL_HOST = 127.0.0.1
MYSQL_PORT = 3306
MYSQL_DB_NAME = hapi_db
MYSQL_USERNAME = root
MYSQL_PASSWORD = 123456

4. 暴露给入口文件使用的数据信息

新建./config/index.js

const { env } = process;
module.exports = {
  host: env.HOST,
  port: env.PORT
};

5. 模式model使用

新建./config/config.js给后台将要创建的数据库模型model使用的数据信息

// 根据环境动态加载数据库配置信息
// 本页面内容主要给数据库连接使用(../models/index.js)
if (process.env.NODE_ENV == "production") {
  require("env2")("./.env.prod");
} else {
  require("env2")("./.env");
}
const { env } = process;
module.exports = {
  development: {
    username: env.MYSQL_USERNAME,
    password: env.MYSQL_PASSWORD,
    database: env.MYSQL_DB_NAME,
    host: env.MYSQL_HOST,
    port: env.MYSQL_PORT,
    dialect: "mysql",
    operatorsAliases: false
  },
  production: {
    username: env.MYSQL_USERNAME,
    password: env.MYSQL_PASSWORD,
    database: env.MYSQL_DB_NAME,
    host: env.MYSQL_HOST,
    port: env.MYSQL_PORT,
    dialect: "mysql",
    operatorsAliases: false
  }
};

使用 sequelize 创建表

1.数据库的创建

sequelize提供创建数据库的命令,但最后还需要自己动手修改数据库格式为utf-8,所以还是手动直接创建方便

2.migration创建表

创建一个商品表 shops

根据以下命令,将会自动创建./migration/2019XXXXXXXXX-create-shops-table.js

其实是可以直接在mysql创建表并填写数据,但这里使用migration来创建主要为了留下对表的创建修改等记录,未来有查询依据。就类比记录创建日志。

./node_modules/.bin/sequelize migration:create --name create-shops-table

xxxx-crate.shops.table.js

"use strict";

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable("shops", {
      id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true
      },
      name: {
        type: Sequelize.STRING,
        allowNull: false
      },
      thumb_url: Sequelize.STRING,
      created_at: Sequelize.DATE,
      updated_at: Sequelize.DATE
    });
  },

  down: (queryInterface, Sequelize) => {face.dropTable("shops");
  }
};

3. 向mysql数据库中创建表

在项目根目录下执行命令

./node_modules/.bin/sequelize db:migrate

成功创建示例

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

可能报错情况1:

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

解决:查看config/config.js配置是否正确,并注释掉operatorsAliases: false

可能报错情况2:

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

解决:mysql数据库没有设置密码,注释掉配置文件(config/config.js)password: env.MYSQL_PASSWORD,

数据库表成功插件

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

使用Sequelize填充表数据

1.在项目根目录下执行命令:

将自动创建 /seeders/2019XXXX-init-shops.js

./node_modules/.bin/sequelize seed:create --name init-shops

2. 编写要填充的数据 xxxx-init-shops.js

"use strict";
/**
 * 初始化 店铺 数据
 * 若 数据库表中存在created_at和updated_at此两个字段,将默认由Sequelize维护
 */
const timestamps = {
  created_at: new Date().toLocaleString(),// 解决时差问题,使用toLocaleString()
  updated_at: new Date().toLocaleString()
};
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.bulkInsert(
      "shops",
      [
        { id: 1, name: "店铺1", thumb_url: "1.png", ...timestamps },
        { id: 2, name: "店铺2", thumb_url: "2.png", ...timestamps },
        { id: 3, name: "店铺3", thumb_url: "3.png", ...timestamps },
        { id: 4, name: "店铺4", thumb_url: "4.png", ...timestamps }
      ],
      {}
    );
  },
  down: (queryInterface, Sequelize) => {
    // 删除shop表id为1,2,3,4的数据
    const { Op } = Sequelize;
    return queryInterface.bulkDelete(
      "shops",
      { id: { [Op.in]: [1, 2, 3, 4] } },
      {}
    );
  }
};

3.执行填充

./node_modules/.bin/sequelize db:seed:all

执行效果和数据结果

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)

目录结构

截止目前为止,目录结构和文件如下:

hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Responsive Web Design

Responsive Web Design

Ethan Marcotte / Happy Cog / 2011-6 / USD 18.00

From mobile browsers to netbooks and tablets, users are visiting your sites from an increasing array of devices and browsers. Are your designs ready? Learn how to think beyond the desktop and craft be......一起来看看 《Responsive Web Design》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试