nodejs中http.ServerRequest注意不是ServerResponse与http.IncomingMessage是同一个吗
发布于 7 年前 作者 aicanxxx 5180 次浏览 来自 问答

如题,再看nodejs中的http模块时被http.ServerRequest与http.IncomingMessage弄懵了,很多的博客中都涉及到http.ServerRequest以及他的事件‘data’,‘end’,‘close’等,但是官方文档中就没有找到,一度怀疑这两个是一样的,可是它们的事件不同,http.IncomingMessage只有‘close’,强迫症的人伤不起,求大神解答

7 回复

http模块下没有ServerRequest这个属性,如果你指的是一个http请求的请求对象,那就是http.IncomingMessage

其实这个ServerRequest是http模块下的对象,也就是createServer方法中的第一个参数,req

@carlisliu @gregLINm 你们说的好像相反啊,createServer方法中的第一个参数是http.IncomingMessage还是ServerRequest啊

去看文档吧,我记得是inComeingMessage是一个类,res参数是它的实例对象

来自酷炫的 CNodeMD

看node源码吧 1.png createServer接受一个监听函数,你关心的是这个监听函数的第一个参数 2.png 监听函数被添加到server实例的request事件上,看request事件的触发 3.png request事件触发的时候传递两个对象,看第一个req是parserOnIncoming函数的第一个参数 4.png parserOnIncoming函数是赋值给parser的onIncoming属性 5.png 看parser.onIncoming函数的触发,参数是parser.incoming,parser.incoming是在上图实例化的ImcomingMessage类的一个实例 6.png ImcomingMessage是从_http_incoming模块导出来的,和http.ImcomingMessage是一样的 7.png

个人简单理解:就是进入服务器的消息 当服务器作为server端,从浏览器发送http请求过来,这时IncomingMessage代表的是http请求对象(也就是ServerRequest) 当服务器作为client端,向其他服务发送http请求,这时IncomingMessage代表的是远程的响应对象(也就是ClientResponse)

IncomingMessage OutgoingMessage是两个抽象的类型,分别代笔来自远方的(比如客户端发给你的请求,server端发给你的响应)和发送给远方的,实际会实现为ServerRequest等类型

回到顶部