- 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接口文档
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
成功创建示例
可能报错情况1:
解决:查看config/config.js配置是否正确,并注释掉operatorsAliases: false
可能报错情况2:
解决:mysql数据库没有设置密码,注释掉配置文件(config/config.js)password: env.MYSQL_PASSWORD,
数据库表成功插件
使用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
执行效果和数据结果
目录结构
截止目前为止,目录结构和文件如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- SpringMVC——数据校验
- gin请求数据校验
- 前端数据校验从建模开始
- 数据一致性校验及数据同步,运维必看
- Go 使用validator进行后端数据校验
- 使用spring validation完成数据后端校验
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!