主体对象
服务器对象与客户端对象通过报文来传输数据,根据两方可以分为请求报文和响应报文,对于服务器来说,请求报文是可读的,响应报文是可写的。
主体对象
- 服务器对象
- 客户端对象
- 请求报文对象(对于服务器来说,是可读)
- 响应报文对象(对于服务器来说,是可写)
我们在前面提到的通过http
模块来创建的服务器中有两个参数,一个request
即请求对象,一个response
即响应对象。
我们可以通过request
请求对象来获得一些请求的信息。
请求对象
- 请求首行中的url:
req.url
- 请求方式:
req.method
- 请求头数据:
req.headers
(它是一个对象)
我们可以打印出请求头数据来看一看,这个对象有哪些信息:
1 | const http = require("http"); |
FreeCodeCamp的后端习题里有一个小的project就是要按照要求获取请求对象里的内容:Request Header Parser Microservice,其中包括req.headers
中的language和software,还包括ipaddress,示例如下:
这个project非常简单:
1 | const express = require("express"); |
除了获取请求头,还可以获取请求体,事实上,我们在body-parser
解析请求体中就已经实现过获取请求体的操作了。
除了读取请求对象,我们还可以写入响应对象。
响应对象
写响应头
一次性写头信息:
res.writeHead(200, headers)
res.writeHead()
可以发送一个响应头给请求- 第一个参数是状态码,可以是200,404….
- 最后一个参数是
headers
响应头 - 中间参数是可选的状态描述
1
2
3response.writeHead(200, {
'Content-Type': 'text/plain'
});- 这个方法只能被调用一次
- 必须在
res.end()
被调用之前调用
设置多次的头信息:
res.setHeader(name, value)
为一个隐式的响应头设置值
1
res.setHeader('Content-Type', 'text/html');
res.setHeader()
会和res.writeHead()
设置的响应头合并,且res.writeHead()
优先
写响应体
一次写响应体:
res.end()
1
res.end('Hello World');
res.end()
之后的内容不会生效
多次写响应体:
res.write()
1
2
3res.write("hello");
res.write("world");
res.end();