Node js 搭建 一个基础的 HTTP 服务案例

文章目录

  • [创建 HTTP 服务](#创建 HTTP 服务)
  • [创建 HTTP 服务注意事项:](#创建 HTTP 服务注意事项:)
  • [获取 HTTP 请求报文参数](#获取 HTTP 请求报文参数)
  • [获取 URL 请求路径以及请求路径查询字符串](#获取 URL 请求路径以及请求路径查询字符串)
  • [获取 URL 请求路径以及请求路径查询字符串(`推荐使用`)](#获取 URL 请求路径以及请求路径查询字符串(推荐使用))
  • 注意事项
  • [设置返回的 HTTP 响应报文](#设置返回的 HTTP 响应报文)
  • [网页中的 URL](#网页中的 URL)
  • [设置资源类型(mime类型 【Content-Type:)](#设置资源类型(mime类型 【Content-Type:))

创建 HTTP 服务

javascript 复制代码
//1. 导入 http 模块
const http = require('http');


//2. 创建服务对象 create 创建 server 服务

// request 是一个包裹了请求报文的对象, 通过 request 对象可以获得请求报文的数据
// response 是一个包裹了响应报文的对象, 通过 response 对象可以设置响应报文


const server = http.createServer((request, response) => {
    response.setHeader('content-type', 'text/html;charset=utf-8');   //设置响应体解码规则

    response.end('你好,欢迎请求服务');       //返回响应体内容
});


//3.  server.listen 方法 监听端口, 启动服务
server.listen(8080, () => {
    console.log('服务已经启动, 端口 8080 监听中...');
});

创建 HTTP 服务注意事项:

  1. 命令行 ctrl + c 用来停止服务
  2. 当服务启动后,更新代码 必须重启服务才能生效
  3. 响应内容中文乱码的解决办法
javascript 复制代码
response.setHeader('content-type','text/html;charset=utf-8');
  1. 端口号被占用时
    • 关闭当前正在运行监听端口的服务 ( 使用较多 )
    • 修改其他端口号
  2. HTTP 协议默认端口是 80 。HTTPS 协议的默认端口是 443, HTTP 服务开发常用端口有 3000,8080,8090,9000

获取 HTTP 请求报文参数

描述 语法
获取请求方法 request.method
获取请求http协议版本 request.httpVersion
设置响应响应头信息 response.setHeader('key键名', '键值')
获取请求路径 request.url (包含请求路径和查询字符串)
获取URL 路径 require('url').parse(request.url).pathname
获取请求URL 查询字符串 require('url').parse(request.url, true).query
获取请求头 request.headers
获取请求体 request.on('data', function(chunk){}) request.on('end', function(){});
javascript 复制代码
//1. 导入 http 模块
const http = require('http');


//2. 创建服务对象 create 创建 server 服务

// request 是一个包裹了请求报文的对象, 通过 request 对象可以获得请求报文的数据
// response 是一个包裹了响应报文的对象, 通过 response 对象可以设置响应报文


const server = http.createServer((request, response) => {
    response.setHeader('content-type', 'text/html;charset=utf-8');   //设置响应体解码规则


    // console.log(request.method);   //获取请求方法

    // console.log(request.httpVersion);   //获取HTTP协议版本

    // console.log(request.url);   //获取请求路径 (不包含IP/域名/端口)

    // console.log(request.headers);   //获取请求头报文

    // response.end('你好,欢迎请求服务');       //返回响应体内容



     //获取请求体
    let datablock = "";
    /** @绑定data事件 ***/
    request.on('data', (chunk) => {    
        datablock += chunk.toString()
    })

    /** @绑定end事件 **/
    request.on('end', () => {
        console.log("获取到完整的请求体数据", datablock);
        response.setHeader('content-type', 'text/html;charset=utf-8');   //设置响应体解码规则
        response.end('你好,欢迎请求服务');       //返回响应体内容
    })
});


//3.  server.listen 方法 监听端口, 启动服务
server.listen(8080, () => {
    console.log('服务已经启动, 端口 8080 监听中...');
});

获取 URL 请求路径以及请求路径查询字符串

javascript 复制代码
// 导入 http 模块
const http = require('http');

//导入 url 模块
const url = require('url');


// 创建服务对象 create 创建 server 服务

// request 是一个包裹了请求报文的对象, 通过 request 对象可以获得请求报文的数据
// response 是一个包裹了响应报文的对象, 通过 response 对象可以设置响应报文


const server = http.createServer((request, response) => {
    let res = url.parse(request.url).pathname;   //获取到请求路径
    //第二个参数传为true,可进行对请求路径查询字符串解包成对象键值对
    let queryData = url.parse(request.url, true);
    //{ num: '"你好呀"', name: '"我很好"' },
    console.log(queryData);
    response.setHeader('content-type', 'text/html;charset=utf-8');   //设置响应体解码规则
    response.end('你好,欢迎请求服务');       //返回响应体内容
});

//  server.listen 方法 监听端口, 启动服务
server.listen(8080, () => {
    console.log('服务已经启动, 端口 8080 监听中...');
});

获取 URL 请求路径以及请求路径查询字符串(推荐使用

new URL

javascript 复制代码
// 导入 http 模块
const http = require('http');
// 创建服务对象 create 创建 server 服务
// request 是一个包裹了请求报文的对象, 通过 request 对象可以获得请求报文的数据
// response 是一个包裹了响应报文的对象, 通过 response 对象可以设置响应报文


const server = http.createServer((request, response) => {
    let url = new URL(request.url, "http://127.0.0.1:8080/");

    /** @获取请求路径 **/
    console.log(url.pathname);
    /*** @获取查询字符串 **/
    console.log(url.searchParams.get("num"));  //传入key

    response.setHeader('content-type', 'text/html;charset=utf-8');   //设置响应体解码规则
    response.end('你好,欢迎请求服务');       //返回响应体内容
});

//  server.listen 方法 监听端口, 启动服务
server.listen(8080, () => {
    console.log('服务已经启动, 端口 8080 监听中...');
});

注意事项

  1. request.url 只能获取路径以及查询字符串,无法获取 URL 中的域名以及协议的内容
  2. request.headers 将请求信息转化成一个对象,并将属性名都转化成了『小写』
  3. 关于路径:如果访问网站的时候,只填写了 IP 地址或者是域名信息,此时请求的路径为『 / 』
  4. 关于 favicon.ico:这个请求是属于浏览器自动发送的请求

设置返回的 HTTP 响应报文

javascript 复制代码
// 导入 http 模块
const http = require('http');
const server = http.createServer((request, response) => {
    response.statusCode = "505";   /*** @设置响应状态码 ***/
    response.statusMessage = 'no-0isok';  /*** @设置响应状态描述 ***/
    response.setHeader('content-type', 'text/html;charset=utf-8');   //设置响应头配置参数
    response.write('你好,欢迎请求服务');   /** @设置响应体 ***/
    response.write('我很好');    /** @设置响应体 ***/
    response.write('天气好');    /** @设置响应体 ***/

    response.end();       //返回响应体内容
});

//  server.listen 方法 监听端口, 启动服务
server.listen(8080, () => {
    console.log('服务已经启动, 端口 8080 监听中...');
});
描述 语法
设置响应状态码 response.statusCode
设置响应状态描述 response.statusMessage ( 用的非常少 )
设置响应响应头信息 response.setHeader('key键名', '键值')
设置响应体 response.write('xx') response.end('xxx')

网页中的 URL

绝对路径

形式 举例 描述
完整绝对路径 https://www.baidu.com/web 直接向目标资源发送请求,容易理解。网站的外链会用到此形式
次完整绝对路径 //www.baidu.com/web 与页面 URL 的协议拼接形成完整 URL 再发送请求。大型网站用的比较多
常用绝对路径 /web 与页面 URL 的协议、主机名、端口拼接形成完整 URL 再发送请求。中小型网站

相对路径

相对路径在发送请求时,需要与当前页面 URL 路径进行 计算 ,得到完整 URL 后,再发送请求,实际项目中使用较少,项目中大多数采用绝对路径


设置资源类型(mime类型 【Content-Type:)

描述

媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。

HTTP 服务可以设置响应头 Content-Type 来表明响应体的 MIME 类型,浏览器会根据该类型决定如何处理资源

下面是常见文件对应的 mime 类型

资源类型 描述
html text/html
css text/css
js text/javascript
png image/png
jpg image/jpg
gif image/gif
mp4 video/mp4
mp3 audio/mpeg
json application/json

🚵‍♂️ 博主座右铭:向阳而生,我还在路上!


🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!


🤼‍♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】


相关推荐
Themberfue2 小时前
Redis ⑦-set | Zset
java·开发语言·数据库·redis·sql·缓存
__lost3 小时前
MATLAB画出3d的常见复杂有机分子和矿物的分子结构
开发语言·人工智能·matlab·化学·分子结构
夜夜敲码4 小时前
C语言教程(十八):C 语言共用体详解
c语言·开发语言
一只很酸de橘子4 小时前
关于https请求丢字符串导致收到报文解密失败问题
网络协议·http·https
一城烟雨_4 小时前
vue3 实现将html内容导出为图片、pdf和word
前端·javascript·vue.js·pdf
大学生亨亨4 小时前
go语言八股文(五)
开发语言·笔记·golang
raoxiaoya4 小时前
同时安装多个版本的golang
开发语言·后端·golang
树懒的梦想5 小时前
调整vscode的插件安装位置
前端·cursor
cloues break.6 小时前
C++进阶----多态
开发语言·c++
我不会编程5556 小时前
Python Cookbook-6.10 保留对被绑定方法的引用且支持垃圾回收
开发语言·python