蓝桥杯web备赛——Node.js

node.js之前只能说是略有了解,这次好好了解一下吧!
东西还是比较多的。

目前来看就了解比赛会用到的http模块就可以了,其他的暂且不做了解

const http = require("http");//1.引入http模块

const app = http.createServer();//2.创建一个服务器实例

app.on("request",function (req,res) {//3.绑定request事件
//createServer() 里可以传入一个回调函数,当服务器被请求时触发,
// 2 个参数,一个是请求对象 req(request),一个是响应对象 res(response),它们两是基于 stream(流)实现的。
    res.end("hello world")
//res 本质上是可写流,所以我们使用 res.end('') 来向客户端返回数据,
//当然也可以使用 res.write() ,但最后还是需要使用 res.end() 来关闭流,而不能像一般的可写流那样使用 res.close()。
//如果不关闭流,客户端的请求又没有设置响应时间,请求就会一直持续。

//通过req 对象,来获取本次请求的路径,请求方法和请求头等:

})

app.listen(8080)//指定监听8080端口,还可以在8080后面加一个回调函数

认识Node.js

Node.js 是一门服务器编程语言,基于V8引擎,它也遵循了 ECMAScript 语法规范,在此规范的基础上加入了 Node.js API,包含处理 http 请求、处理文件、socket 编程等。Node.js API 和 ECMAScript 两者结合组成了 Node.js,完成 Server 端的任何操作,为客户端浏览器进行服务。

Node有很多模块, 分别干不同的事情

它也是一个基于 Chrome V8 引擎的 JavaScript 运行环境,使用了一个事件驱动、非阻塞式 I/O 模型,让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与 PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。全栈!

Node.js 有如下特点和优势:

它是一个 JavaScript 运行环境
依赖于 Chrome V8 引擎进行代码解析
事件驱动(event-driven)
非阻塞 I/O(non-blocking I/O)
轻量、可伸缩,适于实时数据交互应用
单进程,单线程

非阻塞 I/O(non-blocking I/O)

非阻塞 I/O 的意思就是,文件系统在进行 I/O 操作的时候,Node.js 这个线程还可以做其他的事,当文件系统读取文件完毕时,通过事件的回调函数告诉 Node.js 线程,然后 Node.js 把读取的内容响应给用户。

例子:
Node.js 就像国王,国王每天都在写任务清单,然后派发给大臣。大臣把任务清单交给下面的官员去做,而这个时候国王还是可以继续写任务清单的。当官员完成任务这个事件后,统一的任务结果交给国王(以事件回调函数的形式通知 Node.js)。此事件反复进行,这便是事件循环。所以说除了国王(Node.js)线程以外,每件事都是并行发生的,这便是 Node.js 单线程和事件循环能同时处理多个请求的原理。

web请求

http协议的内容就不多讲了。
GET 请求传递参数是在 URL 后面加入一个 “?” ,然后在 “?” 后面加入想要传递的参数

GTE实例讲解:

const http = require("http");
const server = http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
  // 通过请求对象获取完整的请求地址并保存在变量 url 中
  //其中 req.headers['x-scheme'] 返回请求协议名称,如 http 或 https 
  //而 req.headers.host 返回请求的域名和端口,req.url 返回请求的详细路径,包含查询字符串。
  let url = req.headers["x-scheme"] + "://" + req.headers.host + req.url;
  // 将变量传入实例化方法中,并实例化一个 URL 对象
  const myURL = new URL(url);
  //实例化方法有两个参数URL(绝对地址,基础网址),url是第一个参数,是必选项,表示要解析的绝对或相对的网址
  //第二个参数是可选项,表示要解析的基础网址,如果第一个参数是绝对地址,则第二个可以省略,
  //如果第一个对数是相对地址,则第二个参数必须添加请求地址的协议名称、域名和端口。
  //即:req.headers["x-scheme"] + "://" + req.headers.host
  let params = myURL.searchParams.toString();
  res.write(params);
  res.end();
});
// 服务侦听 8080 端口
server.listen(8080, () => {
  console.log("服务器运行在 8080 端口...");
});

在 URL 中输入地址直接访问属于 GET 请求,而 POST 请求则常用于表单数据的提交
POST实例:

const http = require("http");

const server = http.createServer((req, res) => {
  if (req.method === "POST") {
    console.log("content-type:", req.headers["content-type"]); // 获取请求类型 application/json

    //读post数据
    let postData = ""; // postData 用来存储传递给服务器的全部数据
    // 分段循环传输数据,每次传递数据都会执行后面的回调函数
    req.on("data", (chunk) => {
      postData += chunk.toString(); // chunk是二进制数据 所以要把它转换成字符串
    });

    // 当数据传输完毕会执行 end 事件后的回调函数
    req.on("end", () => {
      console.log("postData:", postData);
      res.end("Hello"); //在这里返回因为是异步
    });
    console.log("test"); //这里先被打印 因为上面的代码是异步的
  }
});

server.listen(8080, () => {
  console.log("服务器运行在 8080 端口...");
});

初始化路由

一次地址的指向,实质上是一次数据请求的过程,在这种请求的过程中,还可以携带请求的方式,如 POST 或 GET,同时,也可以携带请求的参数

具体的路由请求东西比较多,就看官网的东西吧!

获取请求方式
通过 req 对象中的 method 属性获取到服务请求的方式,

const reqRouters = (req, res) => {
  if (req.method === "GET") return "这是一次 GET 方式请求";
  if (req.method === "POST") return "这是一次 POST 方式请求";
};
module.exports = reqRouters;

文件操作

在 node 中,如果要读取一个文件,就必须引入一个名称为 fs 的模块,而 fs 是 file-system 的简写,表示文件系统,在该模块中提供了全部操作文件的方法,因此,如果想去读取一个文件,必须先导入该模块,代码如下所示。

const fs = require("fs");

完成模块导入之后,就可以使用该模块中读取文件的方法 fs.readFile() ,该方法是一个异步读取文件的方法,它的调用格式如下所示:
读文件:

fs.readFile(path,[options], callback)

在上述格式中,第一个参数 path 表示读取文件的路径,通常是一个相对路径,如"./public/msg.txt",第二个参数 options 是一个可选项,在该项中可以设置读取文件时的编码格式 encoding ,文件打开的行为 flag ,允许中止正在进行的读取文件 signal ,其中 flag 包含多种方式,
第三个参数 callback 是一个回调函数, 在回调函数中,传入了两个参数,一个参数的名称为 error ,表示文件未读取成功时的错误信息,另一个参数的名称为 data ,表示文件读取成功时的内容信息,接下来通过一个示例来演示文件读取的过程。

在这里插入图片描述
在这里插入图片描述
例子:

// 导入 fs 模块
const fs = require("fs");

// 调用模块中异步读取文件的方法
fs.readFile("./public/msg.txt", "utf-8", (error, data) => {
  if (error) throw error;
  console.log(data);
});

写文件:
fs.writeFile(file, data,[options], callback)
方法中第一个参数 file 表示要写入的文件名,第二个参数 data 表示需要写入的内容,第三个参数 options 是一个可选项,它与文件读取方法中的功能一样,在此不再赘述,第四个参数 callback 是一个回调函数, 在回调函数中,传入了一个名称为 error 的参数,表示文件没有写入成功时的错误信息,接下来通过一个示例来演示文件写入的过程。

// 导入 fs 模块
const fs = require("fs");

// 调用模块中异步写入文件的方法
fs.writeFile("./public/msg.txt", "今天是一个好日子", (error) => {
  if (error) throw error;
  console.log("写入成功!");
});

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

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

相关文章

华为OD机试题【狼羊过河 or 羊、狼、农夫过河】用 C++ 编码,速通

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:狼羊过河 or 羊、狼、农夫过河…

Stata 回归结果详解

目录一、数据信息二、指标1.上半部分2.下半部分三、详细解释SSM - 模型平方和SSR - 残差平方和SST - 总平方和R-squared - R方 - 拟合系数Adj R-squared - 调整后的拟合系数df - 自由度MS - 均方差F - 总体显著性检验Prob > F - P值Root MSECoef.Std. Err.tP > | t |95% …

Python(黄金时代)—— python深入使用

深拷贝和浅拷贝 可变类型与不可变类型 可变对象是指,一个对象在不改变其引用的前提下,可以修改其所指向的地址中的值 不可变对象是指,一个对象引用指向的值是不能修改的 浅拷贝 浅拷贝是对于一个对象的顶层拷贝; 简单理解就是&…

蓝桥杯基础8:BASIC-7试题 特殊的数字

资源限制 内存限制:512.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 153是一个非常特殊的数,它等于它的每位数字的立方和,即1531*1*15*5*53*3*3。编程求所有满足这种条件…

JavaSE——运算符

目录 一.运算符 二.赋值运算符 三.算术运算符 1.四则运算 2.加法运算 3.除法运算 4.取模运算 5.增量运算符 6.自增自减 四.关系运算符 五.逻辑运算符 1.逻辑与 && 2.逻辑或 || 3.逻辑非 ! 4. 短路求值 六.位运算符 1.按位与& 2.按位…

6款无版权可商用的图片网站

今天给大家分享几个无版权可商用的图片网站,无论是网页设计、还是数字营销、商业海报制作等等都可以非常简单方便的查询到自己想要的图片。 免费可商用图标库 unDraw https://undraw.co/illustrations unDraw是作者Katerina Limpitsouni一手创作的扁平化图标库&…

国内IT软件外包公司汇总(2023 最新版)!

大环境不行,面试太少了,很多本科生想进外包都没机会。非常时期,不需要在意那么多,外包作为过渡也是没问题的,很多外包其实比小公司还要好多了。 也不要太担心去外包会污染自己的简历,只要接触的项目还可以…

电商平台API接口,店铺所有商品

item_search_shop-店铺的所有商品 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥(注册Key和secret接入: https://o0b.cn/anzexi)api_nameString是API接口名称(包括…

动态规划-构造最优二叉树的解路径_20230403

动态规划-最优二叉搜索树的解路径(算法导论) 前言 本文将探索递归的先序和后续对信息表达的影响,通过考察最优二叉搜索树的解roo[i][j]的解,我们可以分析先序和后续遍历之间的互相转换关系,以及为了转换,所付出的空间…

蓝桥杯第23天(Python)(疯狂刷题第6天)

题型: 1.思维题/杂题:数学公式,分析题意,找规律 2.BFS/DFS:广搜(递归实现),深搜(deque实现) 3.简单数论:模,素数(只需要…

下一个系统不是Win12,微软要复活Win10X

先是 Windows 三年发布周期回归又是官方 UI 泄露,再到前不久新增的测试频道… 微软将在2024年推出或许名为 Windows 12 的下一代系统基本已经板上钉钉了。 相比过去,小蝾总觉得即便是换代更新能带来的震撼都越来越少了。 当年每一个版本都是划时代的更…

.net C#反编译及脱壳常用工具--小结

1、Reflector --微软自家工具--推荐 Reflector是最为流行的.Net反编译工具。Reflector是由微软员工Lutz Roeder编写的免费程序。Reflector的出现使NET程序员眼前豁然开朗,因为这个免费工具可以将NET程序集中的中间语言反编译成C#或者Visual Basic代码。除了能将IL转…

【学习笔记、面试准备】机器学习西瓜书要点归纳和课后习题参考答案——第3章

机器学习西瓜书要点归纳第3章 线性模型3.1 基本形式3.2 线性回归3.3 对数几率回归3.4 线性判别分析3.5 多分类学习3.6 类别不平衡问题3.7 阅读材料习题目录地址 第3章 线性模型 3.1 基本形式 线性模型定义: 其中x是输入向量 优点:形式简单&#xff…

C#中的转换

一、什么是转换 将一个类型转换为另外一个类型;可以是两个值类型之间的转换;可以是两个引用类型之间的转换;可以是值类型和引用类型之间的转换(拆箱与装箱);可以用户自定义转换。转换的时候有隐式转换/自动…

lombok快速入门

Lombok是一个实用的Java类库&#xff0c;可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。 通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率。 <…

好用到爆的windows文件检索工具--Everything

如果你的电脑是windows系统&#xff0c;那么这款软件强烈推荐大家安装>Everything&#xff0c;他可以帮助你快速的检索的磁盘里的文件&#xff0c;话不多说&#xff0c;开始安装 1.下载 访问https://www.voidtools.com/zh-cn/会跳转官方下载地址 双击安装包运行 效果如下…

Tensor张量基础与常用方法【Pytorch】

Tensor中文译名为张量&#xff0c;标量是零维张量&#xff0c;向量是一维张量&#xff0c;矩阵是二维张量&#xff0c;矩阵的堆叠是三维张量…… 张量的维数可以无穷大&#xff0c;不过由于现实世界是三维的&#xff0c;因此更高维度的图形我们无法想象&#xff0c;但是这并不…

即时通讯-6-已读回执的方案设计

背景-为什么展示已读未读 部分即时通讯软件会选择展示给用户已读未读&#xff0c; 主要是快速感知对方的阅读状态&#xff0c; 感觉到自己受重视&#xff0c; 方便做下一步操作。 如果要带点高度的讲&#xff0c;满足软件所代表的关键用户的诉求 什么场景下要展示已读回执 t…

462. 最小操作次数使数组元素相等 II——【Leetcode每日一题】

462. 最小操作次数使数组元素相等 II 给你一个长度为 n 的整数数组 nums &#xff0c;返回使所有数组元素相等需要的最小操作数。 在一次操作中&#xff0c;你可以使数组中的一个元素加 1 或者减 1 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;2 …

微信小程序获取手机号47001 data format error hint的完美解答(restTemplate发送post请求)

发现问题 这几天正在搞微信小程序获取手机号功能开发&#xff0c;发现发送post请求接口时候&#xff0c;接口返回如下错误&#xff1a; {"errcode": 47001,"errmsg": "data format error hint: [******] rid: ******" } post请求的url为&…