举报网站建设公司,哪里有网络推广,网站建站麻烦吗,青岛市网页设计公司打算自己写一个简单的Router类,来实现koa-router这个中间件的(部分)神奇功能
确定需求
1.首先导入需要在app.js里面导入自己写的Router类 2.然后是使用的方式和挂载router的方式
// 导入Router类
const Router require(./components/router.js);// 使用方式,(暂时只对get请…打算自己写一个简单的Router类,来实现koa-router这个中间件的(部分)神奇功能
确定需求
1.首先导入需要在app.js里面导入自己写的Router类 2.然后是使用的方式和挂载router的方式
// 导入Router类
const Router require(./components/router.js);// 使用方式,(暂时只对get请求做处理)
const router new Router();
router.get(/404,(ctx, next) {ctx.body Page not found;ctx.status 404;
})
app.use(router.routes());设计
以上只是部分代码,在本篇的结尾会贴出整体代码.上面设计到Router实例(router)的2个方法:get和routes.get():接受了2个参数,一个是需要处理的url,一个是对应路由的路由事件处理函数.该方法,将处理的路由和路由处理事件存入一个数组中,因此需要一个_routes的私有数组routes():app.use里面接受的是一个async函数,因此在routes方法中,需要返回一个async函数,当收到来自客户端的url请求后(url的信息被存储在ctx中),需要根据请求方法和url地址,找到_routes中对应的处理函数,然后等待执行. await…
实现
// router.js
class Router{constructor() {this._routes [];}get(url, hanlder) {this._routes.push({url: url,method:GET,handler});}routes() {return async (ctx, next) {const { method, url} ctxconst matchedRouter this._routes.find(r r.method method r.url url);if(matchedRouter matchedRouter.handler(context, next){await matchedRouter.handler(ctx, next);} else {awai next();}}}
}
module.exports Router;补充
完整的app.js
const koa require(koa);
const app new koa()
const Router require(./components/router.js);
const router new Router();router.get(/404, (ctx, next) {ctx.body Page not found;ctx.status 404;
});
app.use(router.routes()).listen(3000);