您的位置:首页 > 理论基础 > 计算机网络

NodeJS http.ServerRequest & http.ServerResponse

2017-05-14 21:57 531 查看

http.ServerRequest

这个对象通常由
HTTP SERVER
建立而非用户手动建立,

并且会作为传递给
'request'事件监听器第一个参数
(就是http.Server相关的request事件当中的函数的参数,一个是request,一个是response)

此对象的可以触发以下事件:

1. Event: ‘data’

function (chunk) { }


当接收到
消息体
(客户端发过来的给服务器的)中的一部分时候会发出data 事件。

例如:代表
消息体的数据块
(chunk)将作为唯一的参数传递给回调函数。

这个时候数据已经按照
传输编码
进行了解码(不是字符集编码)。

消息体本身是一个字符串,

可以使用
request.setBodyEncoding()
方法设定
消息体
的编码。

2. Event: ‘end’

function () { }


每次完全接收完信息后都会触发一次。

没有参数,当这个事件发出后,

将不会再触发其他事件。

1. request.method

request.method
是一个只读字符串。例如’GET’,’DELETE’

2. request.url

代表所请求的URL 字符串.它仅包括实际的HTTP 请求中的URL 地址。如果这个请求是

GET /status?name=ryan HTTP/1.1\r\n
Accept: text/plain\r\n
\r\n


则request.url 应当是

'/status?name=ryan'


※ 如果你想要解析这个URL 中的各个部分

如果你想要解析这个URL 中的各个部分,

你应当使用
require('url').parse(request.url). Example
:

node> require('url').parse('/status?name=ryan')
{ href: '/status?name=ryan'
, search: '?name=ryan'
, query: 'name=ryan'
, pathname: '/status'
}


※ 如果你想从查询字符串中提出这些参数

如果你想从查询字符串中提出这些参数,

你可以使用require(‘querystring’).parse 方法,或者传一个true 作为第二个 参数给require(‘url’).parse 方法。 Example:

node> require('url').parse('/status?name=ryan', true)
{ href: '/status?name=ryan'
, search: '?name=ryan'
, query: { name: 'ryan' }
, pathname: '/status'
}


3. request.headers 只读

4. request.httpVersion

这是HTTP 协议版本(字符串形式), 只读。

例如
'1.1','1.0'


request.httpVersionMajor
是第一个数字,

request.httpVersionMinor
是第二个数字。

5. request.setEncoding(encoding=’null’)

设置此请求的包体的字集编码,
'utf8'或者'binary'


缺省值是null,这表示’data’事件的参数将会是一个Buffer 对象。

6. request.pause()

暂停此request 触发事件.对于控制上传非常有用。

7. request.resume()

恢复一个暂停的request。

8. request.connection

request.connection
是一个代表当前连接的
net.Stream
对象。

对于HTTPS,使用
request.connection.verifyPeer()
request.connection.getPeerCertificate()
来获得客户端(浏览 器)的认证详情。

http.ServerResponse

这个对象一般由HTTP 服务器(也就是http.Server)建立而非用户自己手动建立。它作为
'request'事件
的第二个参数,这是一个可写流。

1. response.writeHead(statusCode, [reasonPhrase], [headers])

这个方法的是用来发送一个响应报文头给本次的请求方,

第一个参数状态码是由一个3位数字所构成的HTTP 状 态,比如404之类的。

最后一个参数headers 是响应头具体内容.

也可以使用一个方便人们直观了解的
reasonPhrase
作为第二个参数。

例如:

var body = 'hello world';
response.writeHead(200, {
'Content-Length': body.length,
'Content-Type': 'text/plain'
});


在一次完整信息交互中此方法只能调用一次,

并且必须在调用
response.end()
之前调用。

2. response.write(chunk, encoding=’utf8’)

此方法必须在writeHead 方法调用后才可以被调用,它负责发送响应报文中的部分数据。

如果要发送一个报文体的多个部分,则可以多次调用此方法。

参数
chunk
可以是一个字符串或者一个buffer。

如果chunk 是一个字符串,则第二个参数指定如何将这个字符串 编码成字节流,

缺省情况下,编码为’utf8’。

注意:

这是一个原始格式http 报文体,

和高层协议中的多段消息体编码格式
({'Transfer-Encoding':'chunked'})
无关。

第一次调用
response.write()
时,

此方法会将已经缓冲的消息头和第一块消息体发送给客户。

当第二次调用 response.write()的时候,

node 将假定你想要以流的形式发送数据(分别发送每一个数据块并不做缓存)

这样, 其实response 对象只是缓存消息体的第一个数据块。

3. response.end([data], [encoding])

这个方法会告诉服务器此响应的所有报文头及报文体已经发出;

服务器在此调用后认为这条信息已经发送完毕;

这个方法必须对每个响应调用一次。

如果指定data 参数,

他就相当于调用了
response.write(data, encoding)
然后跟着调用了
response.end()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: