NodeJs+Koa学习3、路由改造
2022-03-09 本文已影响0人
那钱有着落吗
编写接口还是使用中间件的方式,而在koa中我们是需要判断获取到的路由
1.粗略版的路由(入门)
如图中,请求的所有信息都在ctx中,我们可以获取到请求的方法类型和方法名,然后做相应的处理,如果想要返回给请求,那就得给ctx的请求体赋值(可以字符串或者对象)。
2.使用koa-router
我们在使用一个新的东西,最简单直接清晰的方法就是取官网,官网中有最官方的讲解:
3.路由拆分
如果做过web项目的朋友,那就知道我们不可能把所有的接口放在一个java类中实现对吧,nodejs同理,我们需要根据业务拆分,下面给出的例子就是以主题和书籍为分类,做了两个路由;
- 1.app.js因为是入口文件,所以仅仅实例化koa模块,然后再引入主题和书籍的路由
- 2.主题和书籍里导入路由中间件,然后写接口,最后导出路由这样才能被app.js所引入
参考下图:
4.路由的自动注册
在上面我们写了两个api,如果有很多很多模块,岂不是要写很多繁复的代码来导入router然后注册,是否可以自动注册呢?
这就需要用到模块:require-directory
首先引入模块,然后再回调函数中做出判断,因为虽然路径下可能都是router,但也有不是router的文件,所以这个回调函数相当于做了一次过滤,把router给挑出来,然后加载到引用中去。
5.项目初始化
上面我们是把路由的加载写在了app.js中,其实这种写法不太好,因为如果什么都写到app.js会显得编码非常混乱不清晰,所以我们单独创建一个目录,然后初始化的编码都写到这里面:
这里面我们肯定是需要app的,因为路由要加载到app中,然后也需要require-directory来加载所有的路由;
最后一行红字,是把这个初始化类给导出去。
上图中运行会报错,还差一个router没有导入。
路径硬编码不合适
有过编程经验的朋友都知道,我们最好不要硬编码,而在图中的路径就是写死的,不太好,万一路径有所改变,这里就会出问题。
process是一个全局变量,而cwd方法可以给出当前文件所在的目录位置,我们就可以使用这个绝对路径来解决上面的问题。