Egg是基于Koa进一步封装的一个企业级框架。
mkdir egg-example && cd egg-example
npm init egg --type=simple
npm i
egg-mysql,jwt, egg-cors
// /config/plugin.js
exports.mysql = {
enable: true,
package: 'egg-mysql',
};
exports.cors = {
enable: true,
package: 'egg-cors',
};
exports.jwt = {
enable: true,
package: 'egg-jwt',
};
// 配置端口号
config.cluster = {
listen: {
path: '',
port: 3450,
hostname: '0.0.0.0',
},
};
// mysql 配置
config.mysql = {
// database configuration
client: {
// host
host: 'localhost',
// port
port: '3306',
// username
user: 'xxx',
// password
password: 'xxx',
// database
database: 'xxx',
},
// load into app, default is open
app: true,
// load into agent, default is close
agent: false,
};
// 跨域
config.security = {
csrf: {
enable: false,
},
domainWhiteList: [ '*' ],
};
// 跨域
config.cors = {
origin: '*',
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
};
// token
config.jwt = {
secret: 'xxx',
};
在controller中我们使用 this.ctx获取一些内容,例如:
this.ctx.query
this.ctx.request.body
await this.ctx.service.xxx.xxx()
this.ctx.state.xxx
生成token
const token = this.app.jwt.sign({
xx: xxx
}, this.app.config.jwt.secret);
在Service层中我们最常用的操作数据库的方法:
await this.app.mysql.query(sql)
写sql进行操作,万能方法,但是要小心sql注入。await this.app.mysql.insert(‘table’, { id:xx,a:xx })
增加await this.app.mysql.get(‘table’, { id:1})
查询一条。返回一个对象const results = await this.app.mysql.select('table', {
// 搜索 post 表
where: {
status: 'draft', author: ['author1', 'author2'] }, // WHERE 条件
columns: ['author', 'title'], // 要查询的表字段
orders: [['created_at','desc'], ['id','desc']], // 排序方式
limit: 10, // 返回数据量
offset: 0, // 数据偏移量
});
查询多条,返回数组
await this.app.mysql.update(‘table’, { id:1,xx:xx})
// 修改数据,将会根据主键 ID 查找,并更新where
里面配置await this.app.mysql.delete(‘table’, { id:1 })