JavaScript路由对象声明语法及routes[req.method][req.url]判断逻辑疑问
关于routes结构的猜测
你的理解完全正确,routes就是两层嵌套的键值对(对象)结构:
- 第一层键为HTTP请求方法(示例中为
GET、POST),值为该请求方法下所有路由规则的子对象 - 第二层键为具体的请求路径(示例中为
/info),值为匹配到该路由时需要执行的请求处理函数,函数接收请求对象req、响应对象res作为入参
你贴出的声明代码还原后如下:
routes = { "GET" : { "/info": (req,res) => { res.writeHead(httpStatus.OK, {"Content-Type": "text/html"}) res.end("Welcome to the Info page") } }, "POST" : {} };
if语句的校验逻辑
routes[req.method][req.url]是JavaScript的对象方括号访问语法,分两步执行:
- 先通过
routes[req.method]拿到当前请求方法对应的路由规则子对象 - 再通过
[req.url]尝试从这个子对象里取出当前请求路径对应的处理函数
if判断的作用就是校验当前请求的「方法+路径」组合是否已经在路由配置中预定义了处理逻辑:
- 如果存在对应的处理函数,判断结果为真,就执行
routes[req.method][req.url](req,res)调用这个处理函数完成请求响应 - 如果不存在对应的配置,取值结果为
undefined,判断结果为假,不会执行后续逻辑
对应调用代码如下:
if (routes[req.method][req.url]) { routes[req.method][req.url](req,res); }
举个实际场景的例子:客户端发起GET /info请求时,routes['GET']['/info']能取到对应的处理函数,判断成立,就会返回Welcome to the Info page的响应;如果是GET /test或者POST /info请求,对应位置没有配置规则,判断就不成立。
内容的提问来源于stack exchange,提问作者monkeycoder
相关产品推荐
相关产品推荐

