const Koa = require('koa')const app = new Koa()app.use( async ( ctx ) => {let url = ctx.request.urlctx.body = url})app.listen(3000)
访问 http://localhost:3000/hello/world 页面会输出 /hello/world,也就是说上下文的请求request对象中url之就是当前访问的路径名称,可以根据ctx.request.url 通过一定的判断或者正则匹配就可以定制出所需要的路由。
demo源码
https://github.com/ChenShenhai/koa2-note/tree/master/demo/route-simple
.├── index.js├── package.json└── view├── 404.html├── index.html└── todo.html
const Koa = require('koa')const fs = require('fs')const app = new Koa()/*** 用Promise封装异步读取文件方法* @param {string} page html文件名称* @return {promise}*/function render( page ) {return new Promise(( resolve, reject ) => {let viewUrl = `./view/${page}`fs.readFile(viewUrl, "binary", ( err, data ) => {if ( err ) {reject( err )} else {resolve( data )}})})}/*** 根据URL获取HTML内容* @param {string} url koa2上下文的url,ctx.url* @return {string} 获取HTML文件内容*/async function route( url ) {let view = '404.html'switch ( url ) {case '/':view = 'index.html'breakcase '/index':view = 'index.html'breakcase '/todo':view = 'todo.html'breakcase '/404':view = '404.html'breakdefault:break}let html = await render( view )return html}app.use( async ( ctx ) => {let url = ctx.request.urllet html = await route( url )ctx.body = html})app.listen(3000)console.log('[demo] route-simple is starting at port 3000')
node -harmony index.js