Nodejs http模块常用方法

news2024/11/27 22:46:34

视频链接:黑马程序员Node.js全套入门教程

文章目录

  • http模块
    • 1 什么是http模块
    • 2 进一步理解http的作用
    • 3 服务器相关的概念
      • 3.1 IP地址
      • 3.2 域名和域名服务器
      • 3.3 端口号
    • 4 创建简单的web服务器
      • 1 步骤
      • 2 代码实现
      • 3 req请求对象
      • 4 res响应对象
      • 5 解决中文乱码问题
    • 5 简单路由效果

http模块

官方文档:HTTP Documentation (nodejs.org)

1 什么是http模块

在网络节点中,负责消费资源的电脑,叫做客户端;负责对外提供网络资源的电脑,叫做服务器

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

使用http模块,首先需要导入它:

const http = require('http')

2 进一步理解http的作用

服务器和普通电脑的区别在于,服务器上面安装了web服务器软件,例如:IISApache等,通过安装这些服务器软件,就能把一台普通的电脑变成一台web服务器

在Nodejs中,我们不需要使用IIS、Apache等这些第三方web服务器软件,因为我们可以基于Nodejs提供的http模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供web服务

3 服务器相关的概念

3.1 IP地址

IP地址就是互联网上每台计算机的唯一地址,因此IP地址具有唯一性。如果把“个人电脑”比作”一台电话”,那么“IP地址”就相当于“电话号码”,只有在知道对方IP地址的前提下,才能与对应的电脑之间进行数据通信。

IP地址的格式:通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例如:用点分十进表示的IP地址(192.168.1.1)

注意:

  1. 互联网中每台Web服务器,都有自己的IP地址,例如:可以在Windows的终端中运行ping www.baidu.com命令,即可查看到百度服务器的IP地址。
  2. 在开发期间,自己的电脑既是一台服务器,也是一个客户端,为了方便测试,可以在自己的浏览器中输入127.0.0.1这个IP地址,就能把自己的电脑当做一台服务器进行访问了。

127.0.0.1:回环地址,指向自己的主机

在cmd中使用ipconfig命令可查看自己的ip地址,(linux下: ifconfig)

3.2 域名和域名服务器

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

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

注意:

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

3.3 端口号

计算机中的端口号,就好像是现实生活中的门牌号一样。通过门牌号,外卖小哥可以在整栋大楼众多的房间中,准确把外卖送到你的手中。

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

在浏览器中,如果不输入端口号的话

  • 对于http请求来说,默认访问的是80端口
  • 对于https请求来说的话,默认访问的是443端口
  • 访问其他端口的:http://127.0.0.1:8080

image-20221122155122309

注意:

  1. 一个端口号只能被一个web服务占用
  2. 在实际应用中,URL中的80端口可以被省略

4 创建简单的web服务器

1 步骤

  1. 导入http模块
  2. 创建web服务器实例
  3. 为服务器绑定request请求,监听客户端请求
    启动服务器

2 代码实现

const http = require('http')

// 创建web服务器实例
const server = http.createServer();

// 为服务器实例绑定 request 时间,监听客户端请求
server.on('request', (req, res) => {
    console.log("Someone visit your website")
})

// 启动服务器
server.listen(80, () => {
    console.log("server running at http://127.0.0.1:80")
})

运行后在浏览器输入http://127.0.0.1:80,然后敲击回车就可以在命令行看到打印的内容

image-20221122160254847

但是此时浏览器还是一直在转圈,没有响应内容,这是因为我们此时并没有对该请求作出相应,后续再做处理

3 req请求对象

只要服务器接收到了客户端的请求,就会调用通过server…on0为服务器绑定的request事件处理函数。

如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下的方式:

const http = require('http')

// 创建web服务器实例
const server = http.createServer();

// 为服务器实例绑定 request 时间,监听客户端请求
server.on('request', (req, res) => {
    const url = req.url // 除去主机名的其他部分
    const method = req.method
    console.log(`Your request url if ${url}, and request method is ${method}`)
})

// 启动服务器
server.listen(80, () => {
    console.log("server running at http://127.0.0.1:80")
})

运行后在浏览器输入http://127.0.0.1/index.html,然后敲击回车就可以在命令行看到打印的内容

image-20221122163512275

4 res响应对象

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

const http = require('http')

// 创建web服务器实例
const server = http.createServer();

// 为服务器实例绑定 request 时间,监听客户端请求
server.on('request', (req, res) => {
    const url = req.url
    const method = req.method
    const s = `Your request url if ${url}, and request method is ${method}`
    console.log(s)

    // 调用res.end()方法,向服务器响应一些内容
    res.end(s)
})

// 启动服务器
server.listen(80, () => {
    console.log("server running at http://127.0.0.1:80")
})

运行后在浏览器输入http://127.0.0.1/index.html,然后敲击回车就可以在命令行看到打印的内容

image-20221122163735060

同时在浏览器中也可以看到返回内容

image-20221122163725871

5 解决中文乱码问题

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

修改完后记得重新运行代码

server.on('request', (req, res) => {
    const url = req.url
    const method = req.method
    const s = `请求的url是 ${url}, 请求方法是 ${method}`
    console.log(s)

    // 调用res.end()方法,向服务器响应一些内容
    res.setHeader("Content-Type", 'text/html; charset=utf-8')
    res.end(s)
})

5 简单路由效果

根据访问的不同url返回不同的内容

const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  const url = req.url
  // 设置默认的响应内容为 404 Not found
  let content = '<h1>404 Not found!</h1>'
  // 判断用户请求的是否为 / 或 /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)
})

server.listen(80, () => {
  console.log('server running at http://127.0.0.1')
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Java并发编程之美》读书笔记——ThreadLocalRandom类原理剖析

文章目录1.Random类的局限性2.ThreadLocalRandom3.源码分析Unsafe机制current()方法int nextInt(int bound)方法1.Random类的局限性 在JDK之前包括现在&#xff0c;java.util.Random都是使用比较广泛的随机数生成工具类。 下面我们先来看一下Random的使用方法。 // 创建一个…

kubelet源码 删除pod(一)

k8s版本为1.25.3版本 kubectl delete pod name当删除一个pod的时候会经历一下流程 kubectl会发pod消息给api server。apiserver将信息存入etcd&#xff0c;然后返回确认信息。apiserver开始反馈etcd中pod对象的变化&#xff0c;其他组件使用watch机制跟踪apiserver上的变动。…

行业生态重塑中,新氧如何逆风翻盘

美东时间11月18日盘前&#xff0c;中国互联网医美第一股新氧科技发布2022财年第三季度的业绩报告&#xff0c;业绩符合其业绩指引。 据新氧该季度财报显示&#xff0c;第三季度实现非美国通用会计准则归属于新氧科技的净利润990万元人民币&#xff08;140万美元&#xff09;。…

表格分组标签:表格行分组中的隐藏功能

在程序员的认知中&#xff0c;表格中存在行分组标签&#xff0c;也就是thead&#xff0c;tbody&#xff0c;tfoot三个行分组标签。也许你会认为我在这里还是为大家继续讲解thead&#xff0c;tbody&#xff0c;tfoot三个标签&#xff0c;那就大错特错了 今天除了要讲解他的基础作…

栈和队列

声明&#xff1a;本文主要作为作者的复习笔记&#xff0c;由于作者水平有限&#xff0c;难免有错误和不准确之处&#xff0c;欢迎读者批评指正。 目录快捷跳转线性表接口两个常用子类什么时候选择ArrayList&#xff0c;什么时候选择LinkedList?栈和队列的关系栈栈的实现根据使…

ASP.NET Core教程-Exception(异常和错误处理)

更新记录 转载请注明出处&#xff1a; 2022年11月22日 发布。 2022年11月20日 从笔记迁移到博客。 错误处理基础 错误处理说明 ASP.NET Core中的错误处理分为&#xff1a; ​ 局部Controller中处理错误 ​ 在Controller中定义错误代码和转到错误界面即可 ​ 全局应用中设置错误…

vue.js毕业设计,基于vue.js前后端分离教室预约系统设计与实现(H5移动项目)

功能模块 【后台管理功能模块】 系统设置&#xff1a;设置关于我们、联系我们、加入我们、法律声明 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c…

[附源码]计算机毕业设计JAVA家政管理系统

[附源码]计算机毕业设计JAVA家政管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

Spring Boot中Node.js的下载与Vue CLI在IDEA中的部署及使用(图文解释 简单易懂)

仍有问题可点赞关注收藏后在评论区留言~~~ 一、Node.js与npm的下载 在使用Vue CLI(Vue脚手架)搭建前端系统的时候&#xff0c;因为需要用到npm安装Vue CLI&#xff0c;而npm是集成在Node.js中的&#xff0c;所以需要首先安装Node.js Node.js官网 下载过程很简单&#xff0c;…

数据库错误知识集2

Oracle数据库中最常见的索引类型是b-tree索引&#xff0c;也就是B-树索引&#xff0c;以其同名的计算科学结构命名。 union与union all的区别&#xff08;摘&#xff09;&#xff1a; ①对重复结果的处理&#xff1a;union会去掉重复记录&#xff0c;union all不会&#xff1b;…

转铁蛋白偶联糖(单糖/多糖),(Transferrin)TF-PEG-Dextran葡聚糖/Lysozyme溶菌酶

产品名称&#xff1a;转铁蛋白-聚乙二醇-葡聚糖 英文名称&#xff1a;TF-PEG-Dextran 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 PEG分子量可选&#xff1a;350、550、750、1k、2k、34k、5k…

校招补一个什么样的项目比较好?

校招一年比一年卷&#xff0c;千军万马过独木桥的情况下该怎样充实自己的项目经历&#xff1f;有两件事要搞明白&#xff01; 一、什么是【好】项目&#xff1f; 好项目在简历上要能一眼看出亮点和提问点。并且要能够把提问点对应的回答准备到位&#xff0c;这样才能在招聘量…

外汇天眼周回顾:Equiti开设最新办事处,Vantage推出Vantage Connect服务

在过去的一周内&#xff0c;国外外汇市场都发生了哪些引人注意的外汇新闻&#xff1f;天眼君带大家一起看看&#xff0c;具体新闻如下&#xff1a; 1、Equiti在塞浦路斯利马索尔开设最新办事处 据悉&#xff0c;多资产经纪商Equiti Group在宣布其在塞浦路斯的新业务获得CySEC …

CRM客户管理系统在市面上这么多?应该如何选型?各行业选型CRM必看!

当您下定决心怎样为您的民营企业选择合适的 CRM 时&#xff0c;须要考量很多不利因素。许多基本上国际标准适用于绝大多数寻求 CRM 软件系统的民营企业。其他注意事宜取决于您的业务体量和性质。下列是任何人 CRM 软件系统中须要注意的 14 项常规事宜&#xff0c;以及许多可能对…

【笑小枫玩转SpringBoot系列】目录,一篇拥有一个系列,值得收藏哟~

本系列简介 本系列主要讲解了JAVA后端开发中常用的操作&#xff0c;以初创一个SpringBoot项目开始&#xff0c;以实例的形式讲解了一个单项目框架的诞生。本文可以做为SpringBoot项目的入门学习&#xff0c;也可以当做一个初建项目的框架。 本文主要使用mysql数据库&#xff0…

Flutter for App——一个简单的BMI计算APP

一个简单的BMI计算APP效果截图初始化布局顶部区域标题计算结果组合顶部区域背景中间区域输入框输入行计算按钮分界线组合中间区域底部区域页面组合BMI计算Toast弹窗效果导入依赖封装效果截图 初始化 初始化表单控制器和焦点节点 void initView(){formKey GlobalKey<FormS…

Unity ECS实例:制作俯视角射击游戏!

目录 创建主角 3&#xff1a;主角移动和摄像机跟随 4&#xff1a;实现敌人角色 5&#xff1a;子弹&#xff0c;死亡&#xff0c;机器人 6&#xff1a;粒子与音效 这次我们来使用Unity ECS系统制作一个俯视角度的射击游戏。虽然现在网上有不少ECS的资料和项目&#xff0c;但…

(十二)Spring IoC注解式开发

文章目录回顾注解注解怎么定义&#xff0c;注解中的属性怎么定义&#xff1f;元注解Target注解Retention注解注解怎么使用&#xff1f;通过反射机制怎么读取注解&#xff1f;Spring注解原理声明Bean的注解Spring注解的使用第一步&#xff1a;加入aop的依赖第二步&#xff1a;在…

1.3 c++虚基类的用途以及内存模型

1.3 虚基类 1.3.1 虚基类(菱形继承)的语法实现 对于如下的继承体系&#xff0c;定义了一个公共基类A。类B和类C都由类A公有派生&#xff0c;类D由类B和类C公有派生。 其示例代码如下所示&#xff0c;这段代码的45行是无法通过编译器的&#xff0c;这即是多重继承存在的一个问…

十二、组合API(2)

本章概要 响应式 API reactive() 方法watchEffect() 方法解构响应性状态深入 watchEffect()refreadonlycomputedwatch 11.3 响应式 API Vue 3.0 的核心功能主要是通过响应式 API 实现的&#xff0c;组合 API 将他们公开为独立的函数。 11.3.1 reactive() 方法 reactive()…