Hapi构建小程序后台起步:npm i hapi@16npm i supervisornode app.js
或者希望在编辑完源代码后,服务自动重启,使用 supervisor
supervisor app.js// app.js
const Hapi = require('hapi');
const server = new Hapi.Server();
// 配置服务器启动 host 与端口
server.connection({
port: 3000,
host: '127.0.0.1',
});
const init = async () => {
server.route([
// 创建一个简单的 hello hapi 接口
{
method: 'GET',
path: '/',
handler: (request, reply) => {
reply('hello hapi');
},
},
]);
// 启动服务
await server.start();
console.log(Server running at: ${server.info.uri}
);
};
init();
curl 'http://127.0.0.1:3000'工程目录├── config # 项目配置目录
| ├── index.js # 配置项目中的配置信息
├── models # 数据库 model
├── node_modules # node.js 的依赖目录
├── plugins # hapi 插件配置
| ├── hapi-swagger.js # swagger 插件
├── routes # 路由目录
│ ├── hello-world.js # 测试接口 hello-world
├── utils # 工具类相关目录
├── app.js # 项目入口文件
├── package.json # JS 项目工程依赖库
├── readme.md # 项目工程如何被使用的说明手册环境配置本地数据库连接用户名密码与服务器环境的用户名密码不一样。本地启动服务的 IP 与端口与服务器环境有所不同。数据库的连接用户名、密码,第三方 SDK 的 secret 等参数的配置信息
.env
服务的启动名字和端口,但也可以缺省不填值,默认值的填写只是一定程度减少起始数据配置工作
HOST = 127.0.0.1
PORT = 3000读取 .env 中的配置值# 系统全局安装
npm i env2
// app.js
require('env2')('./.env')
.gitignore 文件中增加一行 .env,用来避免该文件的 git 版本入库。同时在未来交付生产环境的时候,环境参数的配置交由生产环境的运维人员处理,项目的敏感配置数据的安全性可以得到一定程度的保证。
接口定义与校验Swagger & Joi安装npm i hapi-swagger@7 inert@4 vision@4 package// app.js
// 引入自定义的 hapi-swagger 插件配置
const pluginHapiSwagger = require('./plugins/hapi-swagger');// routes/shops.js
const GROUP_NAME = 'shops';
module.exports = [
{
method: 'GET',
path: /${GROUP_NAME}
,
handler: async (request, reply) => {
reply();
},
config: {
tags: ['api', GROUP_NAME],
description: '获取店铺列表',
},
},
{
method: 'GET',
path: /${GROUP_NAME}/{shopId}/goods
,
handler: async (request, reply) => {
reply();
},
config: {
tags: ['api', GROUP_NAME],
description: '获取店铺的商品列表',
},
},
];
Joi 校验数据结构
安装适配 hapi v16 的 joi 插件
npm i joi@13业务数据表结构设计
店铺表:展示店铺名称、图标 URL。
字段 字段类型 字段说明
id integer 店铺的 ID,自增
name varchar(255) 店铺的名称
thumb_url varchar(255) 店铺的图片
created_at datetime 记录的创建时间
updated_at datetime 记录的更新时间
商品表:展示商品名称、图标 URL、商品单价。
字段 字段类型 字段说明
id integer 商品的 ID,自增
name varchar(255) 商品的名称
thumb_url varchar(255) 商品的图片
shop_id integer 店铺的 ID
created_at datetime 记录的创建时间
updated_at datetime 记录的更新时间
数据库操作MySQL 与 Sequelize
Sequelize-cli
npm i sequelize-cli -D
npm i sequelize
npm i mysql2初始化node_modules/.bin/sequelize init
得到一个好用的初始化结构:
├── config # 项目配置目录
| ├── config.json # 数据库连接的配置
├── models # 数据库 model
| ├── index.js # 数据库连接的样板代码
├── migrations # 数据迁移的目录
├── seeders # 数据填充的目录config/config.jsonsequelize-cli 也兼容脚本模式的 config.js开发环境与生产环境的配置参数可以分离在 .env 和 .env.prod 两个不同的文件里,通过环境变量参数 process.env.NODE_ENV 来动态区分。
网友评论