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