蓝桥杯web备赛——Node.js

news2024/10/5 15:30:47

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("写入成功!");
});

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

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

相关文章

【网络安全】--xss漏洞

xss漏洞xss漏洞介绍危害防御方法xss测试语句xss攻击语句1. 反射性xss2.存储型xss3.DOM型xssxss漏洞介绍 定义:XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS&#xff0c…

线段树笔记草稿

一个左节点u << 1和右节点u << 1 | 1 的证明 区间修改部分 1.批量等值修改 前提条件 是要区间修改&#xff0c;区间查询&#xff0c;且修改操作修改的值是相同的 情景 一般是要对一个数组执行k次操作&#xff0c;每次改变其中一个区间内所有元素的值&#x…

B02-国际化语言配置

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;Silence Lamb &#x1f4d6; 本章内容&#xff1a;【国际化语言配置】 Silence-Vitev 1.0.0 基于VITE前端快速开发框架 一、创建工具类 &#x1f356;常用工具类&#xff1a;src\utils\modules\common.js /*** Descriptio…

JavaScript(WebAPI)+具体案例

专栏简介: 前端从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1. WebAPI 背景知识 1.1 什么是 WebAPI 1.2 DOM 基…

2023MathorCup数模D题思路数据代码论文【全网最全分享】

文章目录赛题思路赛题详情参赛建议&#xff08;个人见解&#xff09;选择队友及任务分配问题&#xff08;重要程度&#xff1a;5星&#xff09;2023MathorCup数模D题思路数据论文代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片&#xff0c;…

GitLab集成阿里规约进行代码质量检查

1. 获取P3C-PMD (1) 下载源码 源码地址:https://github.com/alibaba/p3c (2) 打包 (3) 把打好的包(p3c-pmd-2.1.1-jar-with-dependencies.jar)拷贝到gitlab hooks脚本可以引用到的路径下,比如我这里拷贝到gitlab的安装目录下:/var/opt/gitlab/git-hooks(我的git…

Hyperledger Fabric项目搭建区块链浏览器Hyperledger-blockchain-explorer

Hyperledger Fabric项目搭建区块链浏览器 1.下载配置文件 区块链浏览器官网&#xff1a;https://github.com/hyperledger/blockchain-explorer # 根据官网来部署 # 在项目目录创建文件夹 # org1部署区块浏览器 mkdir explorer cd explorer # 下载配置文件 wget https://raw.…

软件测试分享15个适合练手的项目【金融/银行/商城/电商/医药......】

还愁没有练手的项目&#xff1f;我已经给你准备好了&#xff0c;需要评论区留下你的想法吧 1、引言 1.1 文档版本 版本 作者 审批 备注 V1.0 XXXX 创建测试方案文档 1.2 项目情况 项目名称 XXX 项目版本 V1.0 项目经理 XX 测试人员 XXXXX&#xff0c;XX…

【游戏开发】自从遇见了口袋方舟后,我的世界变得精彩了起来

文章目录前言口袋方舟编辑器口袋方舟训练营第一款游戏&#xff1a;四季跑酷第二款游戏&#xff1a;梦境逃脱个人感受其他说起游戏开发&#xff0c;我不允许还有人不知道口袋方舟编辑器&#xff01;前言 一直想写一篇博客来感谢口袋方舟&#xff0c;同时记录自己第一次游戏开发…

Centos7上配置python环境

Centos7上配置python环境1 安装包准备2 pycharm安装3 Anaconda安装4 pycharm配置解释器5 更改pip源1 安装包准备 pycharm下载&#xff1a;jetbrains官网 Anaconda下载&#xff1a; 清华大学开源软件镜像站 2 pycharm安装 下载好的pycharm软件包 2. 在 opt 文件夹下新建 soft…

卫星物联网的发展背景、研究现状、以及未来前景

今天这篇文章&#xff0c;我们来聊聊卫星物联网。 请大家注意&#xff0c;我说的是“物联网”&#xff0c;而不是“互联网”。 物联网&#xff0c;Internet of Things 众所周知&#xff0c;按使用对象&#xff0c;互联网可以分为“人联网”和“物联网”。我们普通消费者用户使…

Linux Shell 实现一键部署Nginx

nginx前言 nginx [engine x] 是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器&#xff0c;最初由Igor Sysoev编写。很长一段时间以来&#xff0c;它一直在许多负载重的俄罗斯网站上运行&#xff0c;包括 Yandex、 Mail.Ru、 VK和 Rambler。根据 Netcraft …

资本/车企持续加码的新赛道,谁将成为本土赢家?

随着汽车行业逐渐复苏&#xff0c;汽车厂商开始规划未来5年能促进销量的新技术&#xff0c;而AR-HUD就是被看好的技术之一。 Envisics创始人兼CEO Jamieson Christmas博士表示&#xff1a;我们几乎在与所有人合作&#xff0c;除了捷豹路虎、松下汽车系统外还有其他合作伙伴。此…

说走就走的旅行?你需要一个旅行必备清单

可能很多朋友都不用清单这个东西&#xff0c;更别说清单模版了。那清单真的好用吗&#xff1f;说实话&#xff0c;当你真的用清单来整理自己的日常工作&#xff0c;乃至生活琐事后&#xff0c;你就会发现你的时间多了&#xff0c;想要完成的事&#xff0c;大部分都可以按时完成…

Mysql 学习(四)InnDB 存储引擎-B+树索引

没有索引的查找 上节我们知道了数据是怎么存储的&#xff0c;数据被分成一个个页&#xff0c;然后页与页之间是根据双向列表来进行连接的&#xff0c;页中的记录是根据单向列表来进行连接的&#xff0c;并且将主键生成页目录。根据这个规则我们查找对应的记录数据&#xff0c;…

责任链设计模式

模拟学生请假流程&#xff0c;用以说明责任链模式。 请假天数 < 10&#xff0c;老师审批&#xff1b; 10 < 请假天数 < 20&#xff0c;主任审批&#xff1b; 20 < 请假天数 < 30&#xff0c;校长审批&#xff1b; 请假天数 > 30&#xff0c;超出学校允许请假…

vulnhub Hackathon2渗透笔记

靶机下载地址&#xff1a;https://www.vulnhub.com/entry/hackathonctf-2,714/ kali ip地址&#xff1a;192.168.20.130 信息收集 扫描靶机ip地址 nmap -sP 192.168.20.0/24确定靶机ip 进行端口扫描 nmap -A -p 1-65535 192.168.20.134首先我们使用匿名用户登录ftp看看有…

Graph Transformer系列论文阅读

文章目录research1.《Do Transformers Really Perform Bad for Graph Representation》【NeurIPS 2021 Poster】2.《Relational Attention: Generalizing Transformers for Graph-Structured Tasks》【ICLR2023-spotlight】survey推荐一个汇总Graph Transformer论文的项目&…

SpringMVC事务控制(xml文件配置和注解配置)

事务的定义 事务应该具有4个属性&#xff1a;原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性&#xff08;atomicity&#xff09;。一个事务是一个不可分割的工作单位&#xff0c;事务中包括的操作要么都做&#xff0c;要么都不做。 一致性&#xff08;c…

实用的生产管理系统案例分析:如何应对市场快速变化?

生产管理系统是一种可视化管理工具&#xff0c;通过展示关键生产数据来协助企业监测生产进程。这些数据可能包括工作进度、生产速率、库存、质量、安全等。通过这些数据的可视化呈现&#xff0c;生产管理人员可以更快速地获得关于生产进程的信息&#xff0c;并能更快地做出决策…