HTTP 服务

1 使用 Node 创建 HTTP 服务

// 引入http模块
const http = require('http');

// 创建 http 服务程序
// http.createServer 需要一个回调函数作为参数,当有客户端像该服务请求的时候,回调函数会触发
// 回调函数被调用的时候,会接收到两个参数,分别是请求对象和响应对象
const server = http.createServer((request, response) => {
    console.log('接收到客户端请求!');
    // 设置响应内容并且结束响应
    response.end('Welcome to Shanghai');
});


// 开启服务 需要设置端口号和回调函数
// 服务成功开启之后,回调函数会被触发
server.listen(8090, () => {
    console.log('http 启动成功! 端口号 8090');
});
  • http 是 Node 中处理 HTTP 协议的模块,可以用来创建 HTTP 服务。
  • server 是创建的 HTTP 服务的实例。http.Server
  • request 是对请求报文的封装对象。http.ClientRequest
  • response 是对响应的封装对象。http.ServerResponse

注意事项:

  1. 停止服务需要命令行 ctrl + c 停止服务

  2. 当服务启动后,更新代码必须重启服务才能生效

  3. 端口号被占用

    Error: listen EADDRINUSE: address already in use :::9000

    1)关闭当前正在运行监听端口的服务,第一步:命令行中运行命令 netstat -ano | findstr 端口号 来获取占用端口的程序的进程ID。第二步:资源管理器->详细信息,根据进程ID找到程序,右键选择结束任务。

    2)使用端口号

  4. HTTP 协议默认端口是 80HTTPS 协议的默认端口是 443, 使用默认端口,浏览器地址栏中的URL可以省略端口号,HTTP 服务开发常用端口有 3000808080909000

2 获取请求报文

获取请求行的信息

request.httpVersion;        // 获取 http 版本
request.url;                // 获取请求的 url 地址
request.method;                // 获取请求方式(请求方法)

获取请求头信息

request.headers;            // 返回对象,包含请求报文中所有的请求头信息
request.headers.请求头名字;

获取客户端 IP 地址

request.socket.remoteAddress

获取 URL 中的查询字符串

const url = requeire('url');
url.parse(request.url, true).query;  // 返回一个对象

GET 、POST等所有的请求方式,URL 中都可以有查询字符串。

获取请求体信息

// request 本质上是一个可读流对象

// 定义变量 将请求体中读取的内容拼接到该变量
let reqBody = '';

// 分次从请求体中读取数据
req.on('data', chunk => {
    reqBody += chunk;
});

// 请求体内容读取结束
req.on('end', () => {
       reqBody;                        // 查询字符串
    querystring.parse(reqBody);   // 解析为对象
});

GET 请求方式没有请求体,POST 请求方式有请求体

3 设置响应报文

设置响应行

response.statusCode = 200;        // 设置响应状态码
response.statusMessage = 'OK';    // 设置响应状态描述

设置响应头

response.setHeader('响应头名字''响应头内容')

同时设置响应行和响应头

// 同时设置 响应状态码、设置响应状态描述、响应头
response.writeHead(响应状态码, '响应状态描述', {
    '响应头名字''响应头内容',
    '响应头名字''响应头内容',
    '响应头名字''响应头内容'
    ...
})

设置响应体

// resposne 本质上是一个可写流对象 可以通过 write 将内容写入流
response.write('内容');
response.write('内容');
response.write('内容');
response.write('内容');

结束响应

// 只用来结束响应
resposne.end();

// 设置响应体并结束响应
response.end('响应体内容');

results matching ""

    No results matching ""