egg-sequelize --- nodejs
项目 egg + sequelize + mysql2
项目结构
配置
安装模块
npm install --save egg-sequelize
npm install --save egg-cors
npm install --save mysql2
config/pulgin.js
复制代码 exports.sequelize = { enable: true, package: 'egg-sequelize', }; exports.cors = { enable: true, package: 'egg-cors', }; 复制代码
config/config.default.js
复制代码 //mysql配置开始 config.sequelize = { dialect: 'mysql', // support: mysql, mariadb, postgres, mssql dialectOptions: { charset: 'utf8mb4', }, database: 'nodejs', host: 'localhost', port: '3306', username: 'root', password: 'root', timezone: '+08:00', }; //mysql配置结束 //cors配置开始 config.security = { csrf: { enable: false, }, domainWhiteList: [ 'http://localhost:8080' ], }; config.cors = { credentials: true, }; //cors配置结束 复制代码
数据建模
mysql 建表
复制代码
CREATE TABLE collect (
id int(11) NOT NULL AUTO_INCREMENT COMMENT '收藏id',
author varchar(255) DEFAULT NULL COMMENT '作者',
date varchar(255) DEFAULT NULL COMMENT '日期',
link varchar(255) DEFAULT NULL COMMENT '链接',
title varchar(255) DEFAULT NULL COMMENT '标题',
created_at datetime DEFAULT NULL COMMENT '创建时间',
updated_at datetime DEFAULT NULL COMMENT '更改时间',
PRIMARY KEY (id),
UNIQUE KEY title (title)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收藏表';
复制代码
model/collect.js
复制代码 'use strict'; module.exports = app => { const { INTEGER, STRING, DATE } = app.Sequelize; const Collect = app.model.define('collect',{ id:{ type:INTEGER, primaryKey:true, autoIncrement:true }, author:STRING, date:STRING, link:STRING, title:STRING, created_at:DATE, updated_at:DATE },{ freezeTableName: true, //使用默认表名,不会变以collects }) return Collect; } 复制代码
(选配)启动时创建数据库表
复制代码 // {work_dir}/app.js module.exports = app => { app.beforeStart(async function () { await app.model.sync({ force: true }); }); }; 复制代码
service
service/collect.js
复制代码 'use strict';
const Service = require('egg').Service;
class CollectService extends Service {
// 查询所有数据
async findAll() {
let ret = await this.ctx.model.Collect.findAll()
console.log(ret)
return ret
}
// 增加数据
async create(data) {
await this.ctx.model.Collect.create(data)
.then(res => {
console.log('res: '+ JSON.stringify(res))
}).catch(err => {
console.log('err: '+ JSON.stringify(err))
})
// try{
// let a= await this.ctx.model.Collect.create(data)
// console.log(a)
// }catch(err){
// console.log(err)
// }
}
// 修改数据
async update() {
const ret = await this.ctx.model.Collect.update({
author: '新作者'
}, {
where: {
id: 2
}
}).then(ok => {
console.log('ok')
console.log(ok)
}).catch(e => {
console.log('message:' + e)
})
}
// 删除数据
async delete(callback){
await this.ctx.model.Collect.destroy({
where: {
id: 20
}
}).then(res => {
console.log('res:' + JSON.stringify(res))
return callback(JSON.stringify(res))
})
}
// 自定义查询
async query(callback){
let sql = 'SELECT COUNT(1) FROM collect'
let ret = await this.ctx.model.query(sql, {type: 'SELECT'})
return ret
}
}
module.exports = CollectService; 复制代码
controller
controller/collect.js
复制代码 'use strict';
const Controller = require('egg').Controller;
class CollectController extends Controller { async findAll(){ const {ctx} = this; ctx.body = await ctx.service.collect.findAll() }
async create(){
const ctx = this.ctx
const body = ctx.request.body
const ret = await ctx.service.collect.create(body)
ctx.body = '<h1>添加数据</h1>'
}
async update() {
await this.ctx.service.collect.update()
this.ctx.body = '<h1>修改数据</h1>'
}
async delete() {
await this.ctx.service.collect.delete(function(res, err) {
console.log('ret: ' + res)
})
console.log('哈哈哈哈')
this.ctx.body = '<h1>删除数据</h1>'
}
}
module.exports = CollectController; 复制代码
router.js
router.get('/collect',controller.collect.findAll) router.post('/create', controller.collect.create) router.get('/update', controller.collect.update) router.get('/delete', controller.collect.delete)
接下来,用postman 或者 其他测试软件自己跑一下...