http模块IncomingMessage中undefined类型的url属性是什么含义?
IncomingMessage.url 为 undefined 的常见场景 - 该类被复用在客户端响应场景:Node.js 的
http模块中,IncomingMessage既用于表示服务端收到的客户端请求,也用于表示客户端发起请求后收到的响应。客户端侧的响应实例本身没有url属性,此时取值必然为undefined。 - 服务端收到畸形HTTP请求:如果客户端发来的请求不符合HTTP规范,服务端解析请求行时无法提取出有效的URL路径,就会将
url设为undefined。 - 手动构造实例未赋值:如果你自己基于
stream.Readable手动构造IncomingMessage实例,没有主动给url属性赋值的话,取值也会是undefined。
处理方案评估
你现在的处理逻辑完全符合普通Web服务的场景:
正常对外提供服务的HTTP服务端,收到的合法请求必然携带有效URL,碰到
url为undefined的情况直接返回400状态码、同时打印错误日志的处理逻辑是正确的。既避免了后续代码对undefined做字符串操作抛出运行时错误,也保留了足够的日志信息用于后续问题排查。
如果你的代码是需要同时兼容服务端请求、客户端响应的通用工具库,可以再加一层上下文判断,区分当前IncomingMessage的使用场景再做差异化处理,普通业务服务端不需要额外修改。
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

