写一个最简陋的node框架(2)

写一个最简陋的node框架(1)

代码已提交到github

如果我们想给一个url匹配相应的路由,我们会关注两点,请求的url和请求的http方法。 而之前的写法把这两个地方写死了,不利于扩展。

所以这次调整了API

class rabbit{ 

  ...
  
  router(method,pathReg,callback) {
        let obj = {
            method,
            pathReg,
            callback
        }
        this.routerArr.push(obj)
    }  
}

复制代码

rabbit是我给框架起的名称。 用router函数rabbit对象中注册路由函数函数。路由函数前两个参数methodpathReg来进行匹配。node http模块定义的http方法有33种,我看是无法使用之前的类似于app.get()这种API来写了,索性当做一个参数传递。 路由函数第二个参数是 pathReg,是利用正则表达式匹配url,在rabbit内部,会用pathReg.test(req.url.split("?")[0])来判断是否匹配路由。

路由函数会把用户注册的匹配规则推到this.routerArr这个数组,并在以这种方式被调用

for(let router of that.routerArr){
    if(router.method.toLocaleLowerCase() == req.method.toLocaleLowerCase() 
                                    && router.pathReg.test(req.url.split("?")[0])){
        router.callback(req,res)
        break
    }
}
复制代码

这意味着:每个请求最多匹配一次路由函数,如果多个路由函数都可以匹配到请求的url,先被注册的路由函数会被执行

整个响应http请求的流程是:

一个示例:

const rabbit = require("./rabbit.js")
let app = new rabbit()

app.router("get",/^\/user\/[a-zA-Z]+[a-zA-Z0-9]*$/,(req,res)=>{
	res.end("hi,world")
})
app.listen(3003)
复制代码

这个服务器可以响应任何方法为get,url为 /user/{{name}}的请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值