上一篇:
之前我们已经介绍过node.js的经典Web框架Express ( ),而Koa框架是由Express框架的原班人马开发的。
Koa的官网介绍Koa的时候认为Koa是node.js下一代Web框架。据了解,阿里内部也在使用Koa。
Koa相比于Express一个最大的特点就是引入了async/await,从而避免了回调函数嵌套。这也是为什么我在写这一篇之前介绍了node.js的异步以及async/await。
从历史使用量上来说,Express框架是领先的,但是Koa在新的项目中受欢迎程度还是比较高的。
Koa安装运行
- 安装Koa "npm install koa --save"
<code>D:\\Projects\\nodejs\\NodeDemo\\koatest>npm install koa --save
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
+ [email protected]
added 43 packages from 23 contributors and audited 55 packages in 21.652s
found 0 vulnerabilities/<code>
- Koa脚手架 Koa-generator
跟Express一样,Express有express-generator,Koa同样也有自己的脚手架,可以用来生成项目。运行命令"npm install koa-generator -g".
<code>D:\\Projects\\nodejs\\NodeDemo\\koatest>npm install koa-generator -g
D:\\Program Files\\nodejs\\node_global\\koa2 -> D:\\Program Files\\nodejs\\node_global\\node_modules\\koa-generator\\bin\\koa2
D:\\Program Files\\nodejs\\node_global\\koa -> D:\\Program Files\\nodejs\\node_global\\node_modules\\koa-generator\\bin\\koa
+ [email protected]
added 5 packages from 4 contributors in 19.502s/<code>
- 使用Koa2创建项目
注意命令中要使用Koa2,而不是Koa。如果使用Koa那么表示使用Koa1。
<code>D:\\Projects\\nodejs\\NodeDemo\\koatest>koa2 -e
destination is not empty, continue? [y/N] y
create : .
create : ./package.json
create : ./app.js
create : ./public/javascripts
create : ./public
create : ./public/stylesheets
create : ./public/stylesheets/style.css
create : ./routes
create : ./routes/index.js
create : ./routes/users.js
create : ./public/images
create : ./views
create : ./views/index.ejs
create : ./views/error.ejs
create : ./bin
create : ./bin/www
install dependencies:
> cd . && npm install
run the app:
> SET DEBUG=koa* & npm start koatest/<code>
这里我们使用使用了命令"koa2 -e",-e表示使用"ejs"作为模板引擎。由于我们在当前目录下创建,所以命令中不需要添加目录名。如果我们需要创建一个新的目录,并在该目录下创建项目,使用"koa2 -e <project>"即可。/<project>
- 安装依赖"npm install",这里就包括 "koa-views"中间件模板引擎,以及其他依赖模块。
<code> "dependencies": {
"debug": "^4.1.1",
"ejs": "~2.3.3",
"koa": "^2.7.0",
"koa-bodyparser": "^4.2.1",
"koa-convert": "^1.2.0",
"koa-json": "^2.0.2",
"koa-logger": "^3.2.0",
"koa-onerror": "^4.1.0",
"koa-router": "^7.4.0",
"koa-static": "^5.0.0",
"koa-views": "^6.2.1"
},/<code>
- 运行 "npm start"
<code>D:\\Projects\\nodejs\\NodeDemo\\koatest>npm start
> [email protected] start D:\\Projects\\nodejs\\NodeDemo\\koatest
> node bin/www/<code>
此时就可以通过浏览器进行访问了。
- 首页访问 http://localhost:3000/
Koa2 路由
上面访问了主页,为什么会出现"Hello Koa2!"?这是由Koa2的路由模块来处理的。
Koa2的路由模块是koa-router,我们在安装依赖时通过命令"npm install"已经安装在当前目录下了。所以在访问主页时,koa-router已经起作用了。那么这个路由是如何起作用的?
- 创建路由
在<project>/routes目录下创建路由,以Koa2默认创建的index.js路由为例。先引入"koa-router"模块,再针对访问路径进行处理。/<project>
<code>const router = require('koa-router')()
router.get('/', async (ctx, next) => {
await ctx.render('index', {
title: 'Hello Koa 2!'
})
})/<code>
注意上面的ctx.render中有一个参数'index',这就指向了我们的模板引擎ejs中的<project>/views/index.ejs。/<project>
<code>
<title>
<link>
EJS Welcome to
/<code>
这里从router中将title键值对传到了index.ejs模板中。
- 在入口app.js中注册index路由。
<code>// routes
app.use(index.routes(), index.allowedMethods())/<code>
到这里,一个完整的路由工作就结束了。
欢迎关注本号,后续会对koa以及node.js其他功能作进一步介绍。
閱讀更多 IT人Vincent 的文章