博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
写一个最简陋的node框架(2)
阅读量:5943 次
发布时间:2019-06-19

本文共 1085 字,大约阅读时间需要 3 分钟。

代码已提交到

如果我们想给一个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}}的请求

转载地址:http://zwzxx.baihongyu.com/

你可能感兴趣的文章
前端常用排序详解
查看>>
Spring中实现监听的方法
查看>>
使用Tooltip会出现一个问题,如果行上出现复选框
查看>>
11.03T1 DP
查看>>
P2924 [USACO08DEC]大栅栏Largest Fence
查看>>
jQuery操作table tr td
查看>>
工作总结:MFC自写排序算法(升序)
查看>>
螺旋队列问题之二
查看>>
扩展运算符和解构赋值的理解
查看>>
手机H5显示一像素的细线
查看>>
Menu 菜单栏
查看>>
Integer跟int的区别(备份回忆)
查看>>
集合解析
查看>>
详解分布式应用程序协调服务Zookeeper
查看>>
软件工程之构建之法
查看>>
UVa 10902
查看>>
Mathf.Sin正弦
查看>>
禁止浏览器缓存js
查看>>
【Redis】安装PHP的redis驱动(二)
查看>>
什么是序列化,为什么要序列化
查看>>