刚开始学习,node,express。用到路由器这块。刚开始直接写在routes下,但是后发现,每次要增加一个新的请求,就会修改对应的路由文件下,增加一个get,或者post方法,感觉非常不方便。后来发现有的项目,不需要这么麻烦,比如:有一个controller目录下,放的是所有的路由,每个文件名对应的就是相应的请求路径,每个请求执行的是controller下对应名字的这个文件。而且这样每次增加新的路由,只需要在controller下增加一个文件就可以了,其他地方都不用修改。 那么问题来了: 这个是怎么实现的,给一个思路了,我已开始想的是,读取目录下的所有文件,获取所有文件的path,然后在require(path)。不知道这样可不可以?
- for express https://github.com/moajs/mount-routes
- for koa https://github.com/moajs/mount-koa-routes
你的思路是对的,但应该不用读取所有的controller文件的path,而且根椐请求参数来判断当前请求所需require的controller文件 switch(ctx.path){ //根椐不同的请求方法和path, require指定目录下的不同文件进行相应的业务逻辑处理 }
同意 tim1020 的说法,另外补充几点:
- 对于相似规则的uri,可以通过参数的形式,在一个action中捕捉然后分流,不一定通过路由的机制实现。比如 koa-router,中的参数的使用。
- 动态加载路由可能会额外的暴露一些私有的方法,这点在实现动态路由时候要注意
- 路由文件的配置虽然看似罗嗦,但却在规则中很好的描述了网站或者服务的功能入口,便于项目的维护。
上面说的都挺好的,尤其是@douguohui 谢谢
感谢大家帮助!
@tim1020 我开始的思路也是这样的,但如果是,根据请求参数去判断,然后在require所需的文件,岂不是在速度方面比一次性require所有的文件要慢,毕竟require所有文件之后,不会在涉及到文件读取IO操作了
最近尝试实现了一个KOA2的路由中间件,不但可以实现自动路由,还可以实现自动RESTful服务,有兴趣的可以看看
https://github.com/tim1020/ec-router
提供规则路由功能,不再需要复杂无趣的路由文件,路由影射表等。
支持的路由规则包括:
RESTful方式,例如:GET /res, PUT /user/12 PATH方式, 例如: GET /res/list, POST /res/add QueryString方式,例如 GET /apiName?c=res&a=list, POST /apiName?c=user&a=add
三种方式均可实现自动的查找controller文件并执行其中的对应的方法。(如果无法匹配,则响应404)
同时提供无代码自动实现RESTful服务的功能,只需要创建好相应的数据库表,并在koa中引入该中间件,即可提供基本的RESTful服务接口,包括常规则的增删改查功能,无需编写业务代码。
你用koa,koa就是你说的那种,
来自酷炫的 CNodeMD
设置一个生成路由的js,然后传参,参数代表路由名字,get或post,还有需要存放的路径,然后生成
@tim1020 目前我们的项目就用的这种方法。但是同时也用到了eval
函数。
现在的孩子做开发已经不屑于读文档了吗?