koa-router - koa如何动态调用控制器

查看:211
本文介绍了koa-router - koa如何动态调用控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

可能一直习惯了php的框架或者其他的MVC框架,最近在研究node的koa框架,于是,想根据请求的url动态调用控制器,然后我使用了koa-router中间件,根据解析url去动态调用对应的controller文件,然后不幸的事情就发生了...
先展示下问题所在:

app.js里router中间件主要调用部分:

var router = require('koa-router');
app.use(router(app));
app.use(function* (next){
    if(typeof this.path === 'undefined')
        yield next;
    var appRouter = require('./router/index');
    appRouter.appRouter(app, this.path);
})

在访问服务器的每次打开不同的url地址时,第一次打开时会报404,然后刷新次url地址会正常方法(如果切换其它链接再切换回来,神奇的404再一次发生了),对应的控制器方法也会重新执行一遍,但是roter似乎只有第一次访问时才执行。不知道如何处理,请各位指点一二,先谢过大家。
项目代码已上传到github:https://github.com/iepngs/koa

解决方案

简述:
环境:node: v6.1.0 (这个应该不影响)

  1. 在当前环境和代码下,代码的执行与预期一致。(如果node版本影响,请提供你的版本号)

  2. 提交了一个pr,解决了第一次访问404的问题。

详细回答

情况

上图

情况是:第一次加载/index/index 和 /index/showbug都报404,之后的访问是200。

并不存在

切换其它链接再切换回来,神奇的404再一次发生了

的情况。

过程分析

挂载路由的方法是:

app.get('/' + controller + '/' + func, realfunc);

/index/index 和 /index/showbug 是两次不同的挂载。
所以应该是有且仅有两次404出现的情况。
情况与分析一致。

更多

顺手解决了第一次访问404的问题。
不是完美解决,我并没有传递next参数进去,也就是你的controller不能够访问next。

原回答

我有去题主的github代码,本人使用koa@2半年时间。

  1. 首先如果是真心想使用koa的话,建议抛掉套路,看看文档,可以很快上手。

  2. 如果是想研究koa这个框架,建议结合着koa源码阅读一起进行。

  3. koa与express不同,它不带router,这也是为什么题主需要引入koa-router。但是恕我直言,题主你完全没有阅读koa-router的文档就进行开发了吧……?对比下题主对koa-router的使用koa-router文档。koa@1好像也没有get方法,都说它不管router咯。

  4. 如果要实现对一个http请求的原生控制,建议不适用koa-router,直接在app.use()里放一个function就好,然后自己实现路由解析,controller的缓存等。你不可能在未阅读koa-router的源码的情况下,就意淫它会按照你的想法走。就是阅读了,你也得想办法研究其路由列表,研究怎么hack进去让它能匹配你最新放进去的路由处理函数。

总结: 题主对koa和koa-router的使用是错误的。建议阅读文档和源码。

这篇关于koa-router - koa如何动态调用控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆