NodeJS http.ServerRequest & http.ServerResponse

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()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值