当前位置: 首页 > article >正文

Node.js中http模块(二)

一、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.kler.cn/a/536117.html

相关文章:

  • Linux 命令行指南
  • 如何在Docker中运行MySQL容器?
  • [ESP32:Vscode+PlatformIO]添加第三方库 开源库 与Arduino导入第三方库的区别
  • Windows 中学习Docker环境准备2、Docker Desktop中安装ubuntu
  • 足球俱乐部管理系统的设计与实现
  • Spring容器初始化扩展点:ApplicationContextInitializer
  • 一文吃透!DataStage 全面概述与核心知识要点大公开
  • 存储可靠性:从基于磁盘的RAID到分布式纠删码(EC),多副本
  • 计算机网络-SSH基本原理
  • 书籍《新能源汽车动力电池安全管理算法设计》和《动力电池管理系统核心算法》脑图笔记
  • Maven 构建命令详解
  • leetcode刷题日记 1
  • anaconda使用
  • apisix网关ip-restriction插件使用说明
  • Spring Boot实现多数据源连接和切换
  • Linux Windows macOS如何安装Ollama
  • QQ自动发送消息
  • TypeScript 快速上手 ------- 学习笔记分享
  • SMU winter 2025 Personal Round 2
  • RabbitMQ:windows最新版本4.0.5安装方案
  • Rust unresolved import `crate::xxx` 报错解决
  • C++11—可变参数模板
  • 【CS61A 2024秋】Python入门课,全过程记录P6(Week12 Interpreters开始,更新于2025/2/7)
  • 【HarmonyOS NEXT】设备显示白屏 syswarning happended in XXX
  • C++ 类和对象 详细版(上)
  • PT2021K 单触控同步输出 IC