Node.js中http模块(二)

news/2025/2/8 18:06:07 标签: http, 网络协议, 网络, node.js

一、http模块

http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer0) 方法,就能方便的把一台普通的电脑,变成一台 Web 服务器,从而对外提供 Web 资源服务。

二、域名和域名服务器

尽管 IP 地址能够唯一地标记网络上的计算机,但!P地址是一长串数字,不直观,而且不便于记忆,于是人们又发明了另一套字符型的地址方案,即所谓的域名(Domain Name)地址。

IP地址和域名是--对应的关系,这份对应关系存放在一种叫做域名服务器(DNS,Domain name server)的电脑中。使用者只需通过好记的域名访问对应的服务器即可,对应的转换工作由域名服务器实现。因此,域名服务器就是提供 IP 地址和域名之间的转换服务的服务器。

注意:

  • 单纯使用 IP 地址,互联网中的电脑也能够正常工作。但是有了域名的加持,能让互联网的世界变得更加方便
  • 在开发测试期间, 127.0.0.1 对应的域名是 localhost,它们都代表我们自己的这台电脑,在使用效果上没有任何区别

 三、端口号

在一台电脑中,可以运行成百上千个web 服务。每个 web 服务都对应一个唯一的端口号。客户端发送过来的网络请求,通过端口号,可以被准确地交给对应的 web 服务进行处理。

四、创建web服务器的步骤

 (1)导入http模块

const http = require('http');

(2)创建web服务器实例

调用http.createServer()方法

// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
  // 设置响应头
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  // 发送响应内容
  res.end('Hello, World!\n');
})

(3)为服务器实例绑定request事件

用于监听客户端的请求,使用server.on()方法。

server.on('request',(req,res)=>{})

req请求对象:只要服务器接收到了客户端的请求,就会调用通过 server.on0 为服务器绑定的 request 事件处理函数。如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下的方式:

server.on('request', req=> {
    //req.url是客户端请求的URL地址
    //req.method是客户端请求的方法
    //req.headers是客户端请求的头信息
    //res是服务器响应对象
    const str=`你访问的地址是${req.url},请求方法是${req.method},请求头信息是${JSON.stringify(req.headers)}`
    res.setHeader('Content-Type', 'text/plain;charset=utf-8')
    console.log(str,'这是服务器响应:')
    // console.log('收到请求')
})

 res响应对象:在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据或属性,可以使用如下的方式:

server.on('request', (req, res) => {
    const str=`你访问的地址是${req.url},请求方法是${req.method}`
    console.log(str, '这是服务器响应:')
    //res.end()方法用于结束响应,并发送响应数据到客户端
    res.end(str)
})

(4)启动服务器

利用server.listen()方法来启动服务器。

// 服务器监听端口 3000
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

五、解决中文乱码问题

当调用 res.end( 方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式:

server.on('request', (req, res) => {
    const str = `你访问的地址是${req.url},请求方法是${req.method}`
    //为了防止中文乱码,设置响应头
    res.setHeader('Content-Type', 'text/plain;charset=utf-8')
    console.log(str, '这是服务器响应:')
    //res.end()方法用于结束响应,并发送响应数据到客户端
    res.end(str)
})

六、根据不同的URL响应不同的HTML

(1)获取请求的URL地址

server.on('request', (req, res) => {
    //获取请求的URL地址
    const url =req.url
})

(2)设置默认的响应内容为404 Not found

server.on('request', (req, res) => {
    //获取请求的URL地址
    const url = req.url
    //设置默认的响应内容为 404 Not Found
    let content = '404 Not Found'
})

(3)判断用户请求的是否为/或/index.html首页

(4)判断用户请求的是否为/about.html关于页面

server.on('request', (req, res) => {
    //获取请求的URL地址
    const url = req.url
    //设置默认的响应内容为 404 Not Found
    let content = '404 Not Found'
    //判断用户请求的是否为/或/index.html首页
    //判断用户请求的是否为/about.html关于页面
    if (url === '/' || url === '/index.html') {
        content = '<h1>首页</h1>'
    } else if (url === '/about.html') {
        content = '<h1>关于页面</h1>'
    }
})

(5)设置Content-Type响应头,防止中文乱码

 //设置响应头
    res.setHeader('Content-Type', 'text/html;charset=utf-8')

(6)使用res.end()把内容响应给客户端

server.on('request', (req, res) => {
    //获取请求的URL地址
    const url = req.url
    //设置默认的响应内容为 404 Not Found
    let content = '404 Not Found'
    //判断用户请求的是否为/或/index.html首页
    //判断用户请求的是否为/about.html关于页面
    if (url === '/' || url === '/index.html') {
        content = '<h1>首页</h1>'
    } else if (url === '/about.html') {
        content = '<h1>关于页面</h1>'
    }
    //设置响应头
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    //设置响应内容
    res.end(content)
})


http://www.niftyadmin.cn/n/5845181.html

相关文章

git SourceTree 使用

Source Tree 使用原理 文件的状态 创建仓库和提交 验证 再克隆的时候发发现一个问题&#xff0c;就是有一个 这个验证&#xff0c;起始很简单 就是 gitee 的账号和密码&#xff0c;但是要搞清楚的是账号不是名称&#xff0c;我之前一直再使用名称登录老是出问题 这个很简单的…

位置定位与IP属地:异同解析与实际应用

在数字化和网络化的今天&#xff0c;位置定位和IP属地已成为我们日常生活中不可或缺的两个概念。那么&#xff0c;位置定位和IP属地是不是一样的&#xff1f;‌虽然都涉及到地理位置的识别&#xff0c;实则在定义、应用场景及精确度上存在着显著差异。本文旨在深入探讨位置定位…

确保数据一致性:RabbitMQ 消息传递中的丢失与重复问题详解

前言 RabbitMQ 是一个常用的消息队列工具&#xff0c;虽然它能帮助高并发环境下实现高效协同&#xff0c;但我们也曾遇到过因网络波动、确认机制失效、系统故障和代码异常等原因导致消息丢失或重复消费的问题&#xff0c;本文将探讨原因及解决方案&#xff0c;希望能为大家提供…

shell脚本控制——处理信号

Linux利用信号与系统中的进程进行通信。你可以通过对脚本进行编程&#xff0c;使其在收到特定信号时执行某些命令&#xff0c;从而控制shell脚本的操作。 1.重温Linux信号 Linux系统和应用程序可以产生超过30个信号。下表列出了在shell脚本编程时会遇到的最常见的Linux系统信…

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-files.py

files.py ultralytics\utils\files.py 目录 files.py 1.所需的库和模块 2.class WorkingDirectory(contextlib.ContextDecorator): 3.def spaces_in_path(path): 4.def increment_path(path, exist_okFalse, sep"", mkdirFalse): 5.def file_age(path__fi…

问题大集04-浏览器阻止从 本地 发起的跨域请求,因为服务器的响应头 Access-Control-Allow-Origin 设置为通配符 *

1、问题 localhost/:1 Access to XMLHttpRequest at xxx&#xff08;请求&#xff09; from origin http://localhost:xxx&#xff08;本地&#xff09; has been blocked by CORS policy: The value of the Access-Control-Allow-Origin header in the response must not be t…

WPF 进度条(ProgressBar)示例一

本文讲述&#xff1a;WPF 进度条(ProgressBar)简单的样式修改和使用。 进度显示界面&#xff1a;使用UserControl把ProgressBar和进度值以及要显示的内容全部组装在UserControl界面中&#xff0c;方便其他界面直接进行使用。 <UserControl x:Class"DefProcessBarDemo…

代码随想录 Day 16 | 【第六章 二叉树】找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树

一、513.找树左下角的值 本题递归偏难&#xff0c;反而迭代简单属于模板题&#xff0c; 两种方法掌握一下 题目链接/文章讲解/视频讲解&#xff1a;代码随想录 1. 整体思路 本题要求找出该二叉树的 最底层 最左边 节点的值。需要注意的是&#xff1a; 1&#xff09;最底层&…