前言
自己使用koa-generator生成一个koa项目后,却发现js的语法都是很老的nodejs,还在用 var 来定义变量,导入包也是用的require。作为一名nodejs忠实粉丝,怎么也得高大上一点嘛!下面就介绍怎么让koa2项目支持 ES7 的import和aysnc,await语法。
安装 runkoa
这个是runkoa的官方介绍,作者确实是个好人,替koa的开发者省去了配置babel的步骤。使用方法如下:在控制台输入:
cnpm install -g runkoa
在bin/目录下面新建一个名为run的文件,并复制一下代码:
#!/usr/bin/env node
var current_path = process.cwd();
require('runkoa')(current_path + '/bin/www')
修改package.json的scripts命令,将www修改成为run:
"scripts": {
"start": "node bin/run",
"dev": "./node_modules/.bin/nodemon bin/run",
"prd": "pm2 start bin/run",
"test": "echo \"Error: no test specified\" && exit 1"
},
如此,再输入npm run dev, 就可以将require变成import,并且支持async和await。
遇到的坑
在使用mongoose的时候,我将操作数据库的代码都放在了schema的statics属性中。写代码的时候请注意async和await是要一起出现的,也就是使用了await的方法必须前面有async的关键字。这个我查了好久,家里的网差,很心累。后来使用koa新建了一个测试项目,将两个项目对比,才发现在定义statics的方法的时候没有使用 async 关键字,但是在调用的时候却使用了await,于是控制台一直报await is a reserved word
# 定义
userSchema.statics.checkname = async function(ctx, name) {
let document = await this.findOne({ username: name })
if (document) {
return { ok: false, msg: '用户名已经存在' }
} else {
return { ok: true, msg: '用户名合法' }
}
}
# 调用
ctx.body = await User.checkname(ctx, name)
好了,填坑完毕,大家如果有啥疑问,欢迎写信到我的邮箱(andyliwr@outlook)。