原生 koa2 实现路由
简单例子
const Koa = require('koa')
const app = new Koa()
app.use( async ( ctx ) => {
let url = ctx.request.url
ctx.body = url
})
app.listen(3000)
访问 http://localhost:3000/hello/world 页面会输出 /hello/world,也就是说上下文的请求 request 对象中 url 之就是当前访问的路径名称,可以根据 ctx.request.url 通过一定的判断或者正则匹配就可以定制出所需要的路由。
定制化的路由
demo 源码:https://github.com/poetries/daily-code-practice/tree/master/node/koa/koa2-demo/route-simple
源码文件目录
.
├── index.js
├── package.json
└── view
├── 404.html
├── index.html
└── todo.html
demo 源码
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'
break
case '/index':
view = 'index.html'
break
case '/todo':
view = 'todo.html'
break
case '/404':
view = '404.html'
break
default:
break
}
let html = await render( view )
return html
}
app.use( async ( ctx ) => {
let url = ctx.request.url
let html = await route( url )
ctx.body = html
})
app.listen(3000)
console.log('[demo] route-simple is starting at port 3000')
运行 demo
执行运行脚本
node -harmony index.js
运行效果如下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: koa2 Session 登录态判断处理
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论