说明
本文所有示例基于async function,node版本node>=7.6.
controller和service的两种写法:基于类和普通方法
这两种写法在获取全局变量有些地方不一样,这里列举最常见的几个全局变量的异同。
- 基于类的controller
module.exports = app => {
class User extends app.Controller {
async queryUser() {
// logger获取,request对象获取
app.logger.info(this.ctx.request.body)
// 全局配置文件获取
const domain = app.config.domain
let users = []
try {
// 全局插件获取
users = await app.model.user.find({})
// service获取
await this.ctx.service.user.find({})
} catch (e) {
app.logger.error(e)
}
// 获取body
this.ctx.body = {
users,
}
// 重定向写法
this.ctx.redirect('http://www.baidu.com')
// render 模版引擎,
this.ctx.body = app.nunjucks.render('register.nj')
}
return User
}
- 基于普通方法(exports)
exports.register = async function register() {
// logger获取,request对象获取
this.logger.info(this.request.body)
try {
// 全局配置文件获取
const domain = this.app.config.domain
// service获取
await this.service.register.register(this.token, this.request.body)
// 全局插件获取
const users = await this.app.model.user.find({})
this.service.message.send()
} catch (e) {
this.logger.error(e)
}
// 获取body
this.body = { 'success' }
// 重定向写法
this.redirect('http://www.baidu.com')
// render 模版引擎,
this.body = this.app.nunjucks.render('success.nj', data)
}
自定义配置文件
egg.js的配置文件非常人性化,有config.default.js,config.default.prod.js,config.test.js等等。 运行时根据环境变量加载不同的配置文件。默认时config.default.js,指定环境变量后会把config.env.js(对应环境)的配置文件和config.default.js合并。
调试代码
由于使用了async await,调试起来有些麻烦,建议使用webstorm或者chrome进行调试,eggjs自带egg-bin,支持在chrome里进行调试,对async,await有良好的支持。
使用chrome调试,配置如下:
在package.json中添加script,使用npm run debug
启动,复制链接在chrome中打开,
"scripts": {
"start": "node index.js",
"debug": "egg-bin debug"
}