月光倾城
发布于 2025-07-22 / 0 阅读
0
0

如何让koa2项目支持ES7的import和aysnc,await语法

前言

自己使用koa-generator生成一个koa项目后,却发现js的语法都是很老的nodejs,还在用 var 来定义变量,导入包也是用的require。作为一名nodejs忠实粉丝,怎么也得高大上一点嘛!下面就介绍怎么让koa2项目支持 ES7 的importaysncawait语法。

安装 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.jsonscripts命令,将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,并且支持asyncawait

遇到的坑

在使用mongoose的时候,我将操作数据库的代码都放在了schemastatics属性中。写代码的时候请注意asyncawait是要一起出现的,也就是使用了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)。


评论