node.js学习笔记14:读写请求/响应头体

主体对象

服务器对象与客户端对象通过报文来传输数据,根据两方可以分为请求报文和响应报文,对于服务器来说,请求报文是可读的,响应报文是可写的。

主体对象
  • 服务器对象
  • 客户端对象
  • 请求报文对象(对于服务器来说,是可读)
  • 响应报文对象(对于服务器来说,是可写)

我们在前面提到的通过http模块来创建的服务器中有两个参数,一个request即请求对象,一个response即响应对象。

我们可以通过request请求对象来获得一些请求的信息。

请求对象

  • 请求首行中的url: req.url
  • 请求方式: req.method
  • 请求头数据: req.headers(它是一个对象)

我们可以打印出请求头数据来看一看,这个对象有哪些信息:

1
2
3
4
5
6
7
8
const http = require("http");
let server = http.createServer((req, res) => {
console.log(req.headers);
})

server.listen(9000, () => {
console.log("server running at 9000");
})

image-20180810213010477

FreeCodeCamp的后端习题里有一个小的project就是要按照要求获取请求对象里的内容:Request Header Parser Microservice,其中包括req.headers中的language和software,还包括ipaddress,示例如下:

image-20180810214338779

这个project非常简单:

1
2
3
4
5
6
7
8
9
10
11
const express = require("express");
let app = express();

app.get('/', (req, res) => {
res.json({'ipaddress': req.ip, "language": req.headers['accept-language'], "software": req.headers['user-agent']});
console.log(req);
})

app.listen(9000, () => {
console.log("server running at 9000");
})

除了获取请求头,还可以获取请求体,事实上,我们在body-parser解析请求体中就已经实现过获取请求体的操作了。

除了读取请求对象,我们还可以写入响应对象。

响应对象

写响应头

  • 一次性写头信息: res.writeHead(200, headers)

    • res.writeHead()可以发送一个响应头给请求
    • 第一个参数是状态码,可以是200,404….
    • 最后一个参数是headers响应头
    • 中间参数是可选的状态描述
    1
    2
    3
    response.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
    3
    res.write("hello");
    res.write("world");
    res.end();