nodejs里面的 http 模块介绍和使用

Node.js的HTTP模块是一个核心模块,它提供了很多功能来创建HTTP服务器和发送HTTP请求。

http.Server是一个基于事件的http服务器,内部是由c++实现的,接口是由JavaScript封装。

http.request是一个http客户端工具。 用户向服务器发送数据。

创建HTTP服务器

HTTP是Nodejs的一个内置模块,不需要npm下载就可以直接使用,以下是基本的使用

// 1. 导入 http 模块
const http = require('http')

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

// 3. 为服务器实例绑定 request 事件,监听客户端的请求
server.on('request', function (req, res) {
  console.log('访问服务器成功')
})

// 4. 启动服务器
server.listen(8080, function () {  
  console.log('running……')
})

req 请求对象

服务器接收到客户端的请求,就会调用通过 server.on() 为服务器绑定的 request 事件处理程序,如果想在事件处理程序中,访问与客户端相关的数据和属性,可以使用如下方式:

server.on('request', function (req, res) {
  // req 是请求对象,它包含了与客户端相关的数据和属性
  // req.url 获取客户端请求的 url 地址
  // req.method 获取客户端请求的类型

  const str = `${req.url} -- ${req.method}`

  console.log(str)
})
res 响应对象

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

server.on('request', function (req, res) {
  // res 是响应对象,它包含了与服务器相关的数据和属性
  // 例如:将字符串发送到客户端

  const str = `${req.url} -- ${req.method}`
  
  // res.end() 方法的作用
  // 向客户端发送指定的内容,并结束这次请求的处理过程
  res.end(str)
})

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

server.on('request', function (req, res) {
  // 发送包含中文的内容
  const str = `您请求的 url 地址是:${req.url},请求的 method 类型是:${req.method}`

  // 为了防止中文乱码问题,需要设置响应头,
  res.setHeader('Content-Type', 'text/html; charset=utf-8')

  // 把包含中文的内容返回给客户端
  res.end(str)
})

发送HTTP请求

var http = require('http');
 
var options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/search?q=nodejs',
  method: 'GET'
};
 
var req = http.request(options, function(res) {
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log("body: " + chunk);
  });
});
 
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});
 
// close the request
req.end();

在上面的代码中,我们创建了一个HTTP请求,然后发送到了Google的服务器。我们设置了请求的选项,包括hostname、port、path和method。然后我们监听了返回的数据,并把返回的内容打印到控制台。

以上就是Node.js的HTTP模块的基本使用。这个模块提供了很多其他的功能,比如HTTPS、流等,但基本的使用方法就像上面展示的那样。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

泰山众筹:创新电商模式引领共赢新潮流

一、泰山众筹模式创新解读 泰山众筹,这一电商领域的创新模式,通过巧妙地将产品销售与积分众筹相结合,为用户和平台带来了双赢的局面。在泰山众筹模式下,用户购买产品的同时能够积累积分,这些积分可以作为参与众筹的筹…

初探 JUC 并发编程:Java 中的并发队列 ConcurrentLinkedQueue 源码级解析

第七部分:Java 并发包中并发队列解析 7.1)ConcurrentLinkedQueue 原理探究 7.1.1)类图结构 ConcurrentLinkedQueue 底层通过单向链表的方式实现,其中有两个 volatile 类型的 Node 节点用来表示队列的首、尾节点。 public Concu…

市场对节能高效电机需求不断增长 变频器具有广阔发展空间

市场对节能高效电机需求不断增长 变频器具有广阔发展空间 变频器是利用变频技术与微电子技术,通过改变电机工作电源频率方式来控制交流电动机的电力控制设备,主要由制动单元、检测单元、微处理单元等部分构成。变频器能够根据需要调整电机的转速&#xf…

如何基于可靠事件模式实现最终一致性?

今天我们一起来探讨一个分布式环境下的常见问题,这个问题与数据的一致性有关。那么,什么是数据一致性呢?要回答这个问题,需要我们回顾一下单块系统和分布式系统中对于数据处理的不同需求。 我们知道,传统的单块系统通常都只与一个数据库进行交互,所有的数据处理过程都位于…

混淆矩阵实战

2.实战 1.加载数据 #加载数据 import pandas as pd import numpy as np data pd.read_csv(data_class_raw.csv) data.head()2.data.loc得到样本属性,并进行样本数据可视化 #可视化数据 %matplotlib inline from matplotlib import pyplot as plt#define X and y…

政安晨:【Keras机器学习示例演绎】(四十一)—— 使用预先训练的词嵌入

目录 设置 简介 下载新闻组 20 数据 让我们来看看这些数据 清洗数据并将数据分成训练集和验证集 创建词汇索引 加载预训练的词嵌入 建立模型 训练模型 导出端到端模型 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与…

【Unity】为小球添加爆发力往前移动的代码

代码里的几个变量都需要在场景中提前创建好并赋值 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Shotobjt : MonoBehaviour {// 点击按钮,克隆一个prefab,然后给这个克隆后的对象添加往前方的力publi…

TCP/UDP通信中的部分函数

UDP(User Datagram Protocol,用户数据报协议)和TCP(Transmission Control Protocol,传输控制协议)是互联网协议套件中最常用的两种传输层协议,它们负责在互联网中端到端地传输数据。尽管它们服务…

链表常见OJ题

目录 题目一:移除链表元素 (1)题目链接 (2)题目要求 (3)题解 题目二:反转链表 (1)题目链接 (2)题目要求​编辑 (3…

【PostgreSQL里的子查询解析】

什么是子查询? 子查询是一种嵌套在其他SQL查询中的查询方式,也可以称作内查询或嵌套查询。当一个查询是另一个查询的条件时,就称之为子查询。子查询的语法格式与普通查询相同,但其在查询过程中起着临时结果集的作用,为…

冰川秘境:全球冰川可视化大屏带你穿越冰原

在浩瀚无垠的宇宙中,地球以其独特的蓝色光环吸引着人们的目光。而在这颗蓝色星球上,冰川这一大自然的杰作,更是以其壮美与神秘,让人们心驰神往。 从阿尔卑斯山脉的冰川到南极洲的冰盖,从格陵兰岛的冰山到喜马拉雅山脉的…

Visual Studio生成C++的DLL文件(最简单版)

前言 当你在使用C编写一些可重用的代码时,将其打包成一个动态链接库(DLL)可以使其更容易地被其他项目或者程序调用和使用。Visual Studio提供了一种简单的方式来生成C的DLL文件。下面是一个关于如何在Visual Studio中生成C的DLL文件的简单教…

基于ChatGPT 和 OpenAI 模型的现代生成式 AI

书籍:Modern Generative AI with ChatGPT and OpenAI Models: Leverage the capabilities of OpenAIs LLM for productivity and innovation with GPT3 and GPT4 作者:Valentina Alto 出版:Packt Publishing 书籍下载-《基于ChatGPT 和 Op…

【Unity】 HTFramework框架(四十八)使用Location设置Transform位置、旋转、缩放

更新日期:2024年5月14日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 Location定义Location复制Location变量的值复制Transform组件的Location值粘贴Location变量的值粘贴Location值到Transform组件在代码中使用Location Loc…

2.3 应用集成技术

第2章 信息技术知识 2.3 应用集成技术 2.3.1 数据库与数据仓库技术 数据库 以单一的数据源即数据库为中心进行事务处理、批处理、决策分析等各种数据处理工作操作型处理也称事务处理,指的是对联机数据库的日常操作,通常是对数据库中记录的查询和修改…

微信小程序主体变更的操作教程

小程序迁移变更主体有什么作用?进行小程序主体迁移变更,那可是益处多多呀!比方说,能够解锁更多权限功能;在公司变更或注销时,还能保障账号的正常使用;此外,收购账号后,也…

Nat Plants | 植物抽核单细胞!多组学探究大豆根瘤成熟过程

发表时间:2023-04 发表期刊:Nature Plants 影响因子:17.352 DOI:10.1038/s41477-023-01387-z 研究背景 根瘤菌是亲和互作寄主植物,感染宿主并在根部形成共生器官根瘤,具有固氮…

vue3中通过自定义指令实现loading加载效果

前言 在现代Web开发中,提升用户体验一直是开发者们追求的目标之一。其中,一个常见的场景就是在用户与应用程序进行交互时,特别是当进行异步操作时(如网络请求),为用户提供即时的反馈,避免用户因…

docker实验

1.Docker安装部署 (1).关闭防火墙 (2).更新源 (3)设置Docker仓库 (4)启动docker (5)查看版本: 2.Docker pull 容器并运行服务; 拉取…