Node.js-http模块服务端请求与响应操作,请求报文与响应报文

简单案例创建HTTP服务端:

// 导入 http 模块
const http = require("http");
// 创建服务对象
const server = http.createServer((request, response) => {
	// 设置编码格式,解决中文乱码问题
	response.setHeader("content-type", "text/html;charset=utf-8");
	// 设置响应体
	response.end("欢迎访问!");
})
// 监听8090端口,启动服务
server.listen(8090, () => {
	console.log("服务已经启动...")
})

端口号被占用:
1.关闭当前正在运行监听端口的服务
2.修改其他的端口号

一、request 获取请求方的相关信息

  • 获取请求方式类型
// get、post
request.method();
  • 获取请求的 url 地址
// 只包含 url 中路径与查询字符串
// /search?name=node&num=2
request.url
  • 通过实例化 URl 对象获取路径与查询字符串
// 得到 URL 对象
let url = new URL(request.url, "http://192.168.0.1:8090");
// 得到路径 => /search
console.log(url.pathname)
// 得到 name 查询字符串 => node
console.log(url.searchParams.get("name"))
  • 获取 http 协议的版本号
// 1.1
request.httpVersion
  • 获取 http 的请求头
request.headers

二、response 获取响应方的相关信息

响应报文组成:

1.响应行:包含:HTTP 版本号、响应状态码、响应状态的描述。
2.响应头:一些附加信息。
3.响应体:响应格式有HTML、CSS、JavaScript、JSON、图片、视频等。

  • 设置响应体内容
const http = require("http");
const fs = require("fs");
const server = http.createServer((request, response) => {
	// 读取文件内容
	let resHtml = fs.readFileSync(__dirname + "/index.html");
	// 方式一:设置响应体,可以多次调用
	response.write(resHtml);
	response.write("hello2");
	response.end();
	// 方式二:设置响应体,只能调用一次
	response.end(resHtml);
});
// 监听8090端口,启动服务
server.listen(8090, () => {
	console.log("服务已经启动...")
});
  • 设置响应状态码
response.statusCode = 200;

在这里插入图片描述

在这里插入图片描述

  • 设置响应头
response.setHeader("content-type", "text/html;charset=utf-8");
  • 响应不同静态资源文件
const http = require("http");
const fs = require("fs");
const server = http.createServer((request, response) => {
	// 获取请求url路径
	let { pathname } = new URL(request.url, "http://192.168.0.1:8090");
	// 拼接资源文件路径
	let filePath = __dirname + "/pages" + pathname;
	fs.readFile(filePath, (err, data) => {
		// 文件读取失败
		if(err){
			response.statusCode = 500;
			response.end('文件读取失败!');
			return
		}
		// 成功,响应体内容
		response.end(data);
	})
})

三、设置资源类型 (mime类型)

媒体类型(通常称为 Multipurpose lnternet Mail Extensions 或 MIME 类型)是一种标准,用来表示文档、文件或字节流的性质和格式。
HTTP 服务可以设置响应头 Content-Type 来表明响应体的MIME 类型,浏览器会根据该类型决定如何处理资源。

const path = require("path");
// 1. 声明一个变量
Let mimes = {
	html: 'text/html',
	css: 'text/css',
	js: 'text/javascript',
	png: 'image/png',
	jpg:'image/jpeg',
	gif:'image/gif',
	mp4: 'video/mp4',
	mp3: 'audio/mpeg',
	json: 'application/json'
}

// 2. 获取文件后缀名
let ext = path.extname("资源文件路径").slice(1);
// 3. 获取文件后缀名对应的 mime 类型
let type = mimes[ext];
// 判断是否有对应类型
type ? response.setHeader("content-type", type) : response.setHeader("content-type", "application/octet-stream")
  • 解决乱码问题
// 判断是否有对应类型
if(type){
	if(ext === "html"){
		response.setHeader("content-type", type + ";charset=utf-8");
	}else{
		response.setHeader("content-type", type);
	}
}else{
	response.setHeader("content-type", "application/octet-stream");
}

对于末知的资源类型,可以选择 application/octet-stream 类型,浏览器在遇到该类型的响应时,会对响应体内容进行独立存储,也就是我们常见的下载效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北斗星的爱886

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值