为什么http请求的req.url拆分后返回两个数组而非一个?
问题成因
- 浏览器访问任意HTTP服务时,都会默认自动发起一个获取站点图标的请求,对应路径为
/favicon.ico。该路径用/拆分后得到的数组为[ '', 'favicon.ico' ],不存在下标为3的元素。 - 你的代码没有对请求路径做任何过滤,对所有进入的请求都统一执行
request[3].split('+')操作。当处理favicon请求时,request[3]的值为undefined,对undefined调用split方法就会抛出类型错误。 - 额外注意:你贴出的代码末尾多了一个多余的闭合大括号,属于语法错误,也会导致服务无法正常启动。
修复方案
你可以按以下要求修改代码,全程不会用到URL模块,符合导师的限制规则:
- 先过滤掉
favicon.ico的无效请求 - 对路径拆分后的数组长度做校验,确认需要的下标存在后再执行后续操作
- 删除多余的语法错误符号
修复后的参考代码:
let http = require('http'); http.createServer(function (req, res) { // 过滤favicon无效请求 if (req.url === '/favicon.ico') { res.end(); return; } let request = req.url.split('/'); // 校验数组长度,确保下标3的元素存在 if (request.length >= 4 && request[3]) { let splitResult = request[3].split('+'); console.log('拆分结果:', splitResult); } console.log('路径拆分数组:', request); }).listen(5000);
内容的提问来源于stack exchange,提问作者random math student
相关产品推荐
相关产品推荐

