创建koa2项目
安装koa-generator
npm install koa-generator -g
生成koa2项目
koa2 [project]
安装并启动服务
cd [project]
npm install
npm start
打开浏览器并访问http://localhost:3000/
Sequelize连接mysql数据库
安装
npm install sequelize --save
npm install mysql mysql2 --save
配置数据库,创建数据库访问代码
/config/db.js
const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'user', 'password', {
host: 'localhost',
dialect: 'mysql',
operatorsAliases: false,
dialectOptions: {
// 字符集
charset: "utf8mb4",
collate: "utf8mb4_unicode_ci",
supportBigNumbers: true,
bigNumberStrings: true
},
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
timezone: '+08:00' //东八时区
});
module.exports = {
sequelize
}
/schema/user.js
创建数据库结构。示例User定义如下:
字段 | 说明 | 必填 |
---|---|---|
id | 自增id | 否 |
firstname | 名 | 是 |
lastname | 姓 | 是 |
createdAt | 创建时间 | 否 |
updatedAt | 更新时间 | 否 |
/**
├── schema
└── user.js
*/
const moment = require('moment');
module.exports = function (sequelize, DataTypes) {
return sequelize.define('user', {
// 用户ID
id: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: true,
autoIncrement: true,
},
// 名
firstname: {
type: DataTypes.STRING,
allowNull: false,
field: 'firstname',
},
// 姓
lastname: {
type: DataTypes.STRING,
allowNull: false,
field: 'lastname'
},
// 创建时间
createdAt: {
type: DataTypes.DATE,
get() {
return moment(this.getDataValue('createdAt')).format('YYYY-MM-DD HH:mm:ss');
}
},
// 更新时间
updatedAt: {
type: DataTypes.DATE,
get() {
return moment(this.getDataValue('updatedAt')).format('YYYY-MM-DD HH:mm:ss');
}
}
}, {
// 如果为 true 则表的名称和 model 相同,即 user
// 为 false MySQL创建的表名称会是复数 users
// 如果指定的表名称本就是复数形式则不变
freezeTableName: true
})
}
/models/user.js
/**
├── models
└── user.js
*/
// 引入刚刚在第五点建立连接mysql数据库的db.js文件
const db = require('../config/db');
// 引入Sequelize对象
const Sequelize = db.sequelize;
// 引入上一步的文章数据表模型文件
const User = Sequelize.import('../schema/user');
// 自动创建表
Article.sync({force: false});
class ArticleModel {
/**
* 创建文章模型
* @param data
* @returns {Promise<*>}
*/
static async createUser(data) {
return await User.create({
firstname: data.firstname, // 名
lastname: data.lastname, // 姓
})
}
/**
* 查询取文章详情数据
* @param id 文章ID
* @returns {Promise}
*/
static async getUserDetail(id) {
return await User.findOne({
where: {
id,
},
})
}
}
module.exports = UserModel
/controllers/user.js
/**
├── controllers
└── user.js
*/
const UserModel = require('../models/user')
class userController {
/**
* 创建用户
* @param ctx
* @returns {Promise.}
*/
static async create(ctx) {
// 接收客服端
let req = ctx.request.body;
if (req.firstname // 名
&& req.lastname // 姓
) {
try {
// 创建用户
const ret = await UserModel.createUser(req);
// 返回新创建的用户信息
const data = await UserModel.getUserDetail(ret.id);
ctx.response.status = 200;
ctx.body = {
code: 200,
msg: '创建成功',
data
}
} catch (err) {
ctx.response.status = 412;
ctx.body = {
code: 200,
msg: '创建失败',
data: err
}
}
} else {
ctx.response.status = 416;
ctx.body = {
code: 200,
msg: '参数不齐全',
}
}
}
/**
* 获取用户详情
* @param ctx
* @returns {Promise.}
*/
static async detail(ctx) {
let id = ctx.params.id;
if (id) {
try {
// 查询文章详情模型
let data = await UserModel.getUserDetail(id);
ctx.response.status = 200;
ctx.body = {
code: 200,
msg: '查询成功',
data
}
} catch (err) {
ctx.response.status = 412;
ctx.body = {
code: 412,
msg: '查询失败',
data
}
}
} else {
ctx.response.status = 416;
ctx.body = {
code: 416,
msg: '用户ID必须传'
}
}
}
}
module.exports = userController
配置接口路由
const router = require('koa-router')()
const UserController = require('../controllers/user')
router.post('/user', UserController.create)
router.get(
'/user/:id',
UserController.detail
)
module.exports = router
配置接口路由
安装koa-cors
npm install koa-cors --save
在app.js中初始化跨域
const cors = require('koa-cors');
// 使用koa-cors
app.use(cors());
测试接口
使用postman创建post请求,传入firstname和lastname,并使用x-www-form-urlencoded方式发送post请求创建用户。
使用postman创建get请求,传入id请求用户信息。
//post
http://localhost:3000/user
//get
http://localhost:3000/user/:id