Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)

目录

Node.js Stream(流)(三)

Node.js http模块

Node.js GET/POST请求(一)

Node.js GET/POST请求(二)

Node.js 路由

Node.js 创建客户端

 Node.js 作为中间层

Node.js 文件系统模块(一)


 

Node.js Stream(流)(三)

1、管道流
管道提供了一个数据从输出流到输入流的机制。
我们使用管道可以从一个流中获取数据并将数据传递到另外一个流中。


举例:复制文件
我们把文件比作装水的桶,而水就是文件里的内容,我们用一根管子 (pipe) 连接两个桶使得水从一个桶流入另一个桶,这样就慢慢的实现了大文件的复制过程。

 

var fs = require("fs");
// 创建一个可读流
var readerStream = fs.createReadStream('input.txt');
// 创建一个可写流
var writerStream = fs.createWriteStream('output.txt');
// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到output.txt 文件中
readerStream.pipe(writerStream);

2、链式流
链式是通过连接输出流到另外一个流并创建多个流操作链的机制。
pipe() 方法的返回值是目标流。

var fs = require("fs");
var zlib = require('zlib');
// 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('input.txt').pipe(zlib.createGzip()).pipe(fs.createWriteStream('input.txt.gz')
);
var fs = require("fs");
var zlib = require('zlib');
// 解压 input.txt.gz 文件为 input.txt
fs.createReadStream('input.txt.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('input.txt'));

Node.js http模块

HTTP 核心模块是 Node.js 网络的关键模块。
使用该模块可以创建web服务器。 

1、引入http模块

const http = require('http') 

2、创建 Web 服务器

//返回 http.Server 类的新实例
//req是个可读流
//res是个可写流
const server=http.createServer( function (req, res) {res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });res.write('服务器响应了,这是响应内容')res.end()
})

3、启动服务器并监听某个端口

server.listen('3030',function(){console.log('服务器已做好准备,正在监听3030端口')
})

Node.js GET/POST请求(一)

1、获取 POST 请求内容 

<!-- test.html -->
<form id="form1" action="http://localhost:3030" method="post">姓名:<input type="text" name="name"><br />年龄:<input type="text" name="age"><br /><input type="submit" value="提交"
/>
</form>
//test.js
const http=require('http')
const querystring = require('querystring')
const server = http.createServer((req, res) => {var bodyStr = ''req.on('data', function (chunk) {bodyStr += chunk})req.on('end', function () {const body = querystring.parse(bodyStr);// 设置响应头部信息及编码res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});if(body.name && body.age) {res.write("姓名:" + body.name);res.write("<br>");res.write("年龄:" + body.age);}res.end()});
})
server.listen('3030',function(){console.log('服务器正在监听3030端口')
})

Node.js GET/POST请求(二)

1、获取Get请求内容 

//浏览器访问地址
http://localhost:3030/?name=%27baizhan%27&&age=10
const http = require('http')
const url = require('url')
const server = http.createServer(function (req, res) {res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });//使用url.parse将路径里的参数解析出来const { query = {} } = url.parse(req.url, true)for ([key, value] of Object.entries(query)) {res.write(key + ':' + value)}res.end();
})
server.listen('3030', function () {console.log('服务器正在监听3030端口')
})

Node.js 路由

 我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码。

const http = require('http')
const url = require('url')
const server = http.createServer(function (req, res) {//获取请求路径const pathname = url.parse(req.url).pathname;if (pathname == '/') {res.end('hello')}else if (pathname == '/getList') {res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });res.write(JSON.stringify({ recrods: [{ name: 'fyx' }] }))res.end()}else{res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });res.end('默认值')}
})
server.listen('3030', function () {console.log('服务器正在监听3030端口')
})

整理

//router.js
module.exports=(pathname,res)=>{if (pathname == '/') {res.end('hello')}else if (pathname == '/getList') {res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });res.write(JSON.stringify({ recrods: [{ name: 'fyx' }] }))res.end()}else{res.end('默认值')}
}
//test.js
const http = require('http')
const url = require('url')
const router = require('./router')
const server = http.createServer(function (req, res) {const pathname = url.parse(req.url).pathname;router(pathname,res)
})
server.listen('3030', function () {console.log('服务器正在监听3030端口')
})

Node.js 创建客户端

//client.js
var http = require('http');
// 用于请求的选项
var options = {host: 'localhost',port: '3030',path: '/' 
};
// 处理响应的回调函数
var callback = function(response){// 不断更新数据var body = '';response.on('data', function(data) {body += data;});response.on('end', function() {// 数据接收完成console.log(body);});
}
// 向服务端发送请求
var req = http.request(options, callback);
req.end();
//server.js
const http=require('http')
const url=require('url')
const server = http.createServer(function (req, res) {const {pathname}=url.parse(req.url)if (pathname == '/') {res.write('hello')res.write('xiaotong')res.end()}})
server.listen('3030', function () {console.log('服务器正在监听3030端口')
})

 

 Node.js 作为中间层

//test.js
const http = require('http')
const url = require('url')
const server = http.createServer(function (req, res) {const pathname = url.parse(req.url).pathname;// 用于请求的选项var options = {host: 'localhost',port: '8080',path: pathname,method:req.method,headers:{token:'xxxxx'}};// 处理响应的回调函数var callback = function (response) {const {headers= {},statusCode}=responseres.writeHead(statusCode, {...headers})response.pipe(res)}// 向服务端发送请求var req = http.request(options, callback);req.end();
})
server.listen('3030', function () {console.log('服务器正在监听3030端口')
})

 

//server.js
const http=require('http')
const server=http.createServer((req,res)=>{const {headers={}}=reqres.writeHead(200,{'Content-Type': 'application/json; charset=utf-8'})if(headers.token){res.end(JSON.stringify({code:0,message:'成功',data:[]}))}else{res.end(JSON.stringify({code:-1,message:'您还没有权限'}))}
})
server.listen('8080',function(){console.log('服务器正在监听8080端口')
}) 

Node.js 文件系统模块(一)

fs 模块提供了许多非常实用的函数来访问文件系统并与文件系统进行交互。
文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync() 。 

var fs = require("fs");
// 异步读取
fs.readFile('input.txt', function (err, data) {if (err) {return console.error(err);}console.log("异步读取: " + data.toString());
});
// 同步读取
var data = fs.readFileSync('input.txt');
console.log("同步读取: " + data.toString());
console.log("程序执行完毕。");

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解释LED显示屏的裸眼3D特效原理

LED电子大屏幕的3D特效技术正在不断发展&#xff0c;而实现这一技术的原理主要包括分光、分色、分时和光栅等四种方法。这些原理都有各自的特点和应用场景&#xff0c;下面将对它们进行详细介绍。 1. 分光方法 分光方法是一种基于偏振光的3D显示技术。通过使用偏振滤镜或偏振片…

曝光!WPS用户信息或被盗用,紧急行动,迅软DSE数据加密应时而动!

WPS摊上大事了&#xff01;有用户发现&#xff0c;在WPS更新的一版用户隐私政策中&#xff0c;明确提到&#xff1a;“我们将对您主动上传的文档材料&#xff0c;在处理后作为AI训练的基础材料使用。”换句话说&#xff0c;WPS有可能“白嫖”用户的文档信息&#xff0c;用于投喂…

A preview error may have occurred. Switch to the Log tab to view details.

我们在学习鸿蒙应用开发的UIAbility内页面间的跳转内容的时候会遇到页面无法跳转的问题。并伴随标题的error报错 Entry Component struct Index {build() {Column({ space: CommonConstants.COLUMN_SPACE }) {//UIAbility内页面间的跳转Button(Next).onClick(() > {router.…

好用的基于layui的免费开源后台模版layuimini

发现一个好用的后台模版 基于layui的免费开源后台模版layuimini layuimini - 基于Layui的后台管理系统前端模板 easyadmin开源项目 EasyAdmin是基于ThinkPHP6.0Layui的快速开发的后台管理系统。 演示站点 演示地址&#xff1a;跳转提示&#xff08;账号&#xff1a;admin&a…

【mmseg】ValueError: Only one of `max_epochs` or `max_iters` can be set.报错解决

目录 &#x1f49c;&#x1f49c;1背景 ❤️ ❤️2分析 &#x1f525;2.1config查看 &#x1f525;2.2BaseRunner基类 &#x1f49a;&#x1f49a;3解决 &#x1f525;3.1按照epoch &#x1f525;3.2按照iters 整理不易&#xff0c;欢迎一键三连&#xff01;&#xff01…

PTA NeuDS-数据库题目集

一.判断题 1.在数据库中产生数据不一致的根本原因是冗余。T 解析&#xff1a;数据冗余是数据库中产生数据不一致的根本原因&#xff0c;因为当同一数据存储在多个位置时&#xff0c;如果其中一个位置的数据被修改&#xff0c;其他位置的数据就不一致了。因此&#xff0c;在数据…

在Linux中对Docker中的服务设置自启动

先在Linux中安装docker&#xff0c;然后对docker中的服务设置自启动。 安装docker 第一步&#xff0c;卸载旧版本docker。 若系统中已安装旧版本docker&#xff0c;则需要卸载旧版本docker以及与旧版本docker相关的依赖项。 命令&#xff1a;yum -y remove docker docker-c…

编程学习及常见的技术难题

文章目录 编程学习及常见的技术难题引言如何学习编程学习参考开发工具推荐编程中常见的技术难题 编程学习及常见的技术难题 引言 学习编程是一件有趣也有挑战的事情&#xff0c;它可以让你创造出各种有用的软件&#xff0c;解决各种复杂的问题&#xff0c;甚至改变世界。 编程中…

萤石云接口调用

获取appKey和secret 登录后在开发者服务-我的应用中获取 根据appKey和secret获取accessToken 参考官方文档&#xff1a;文档概述 萤石开放平台API文档 # 获取accessToken url_accessToken"https://open.ys7.com/api/lapp/token/get" data {"appKey": &…

大模型的开源闭源

文章目录 开源&闭源开源和闭源的优劣势比较开源和闭源对大模型技术发展的影响开源与闭源的商业模式比较国内的大模型开源和闭源的现状和趋势 开源和闭源&#xff0c;两种截然不同的开发模式&#xff0c;对于大模型的发展有着重要影响。 开源让技术共享&#xff0c;吸引了众…

修复debain/ Ubuntu 中的“密钥存储在旧版 trust.gpg 密钥环中”问题

如果您在 Ubuntu 22.04 及更高版本中使用 PPA 或添加外部存储库&#xff0c;您很可能会看到如下消息&#xff1a; W: https://packagecloud.io/slacktechnologies/slack/debian/dists/jessie/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg),…

Jmeter全流程性能测试实战

项目背景&#xff1a; 我们的平台为全国某行业监控平台&#xff0c;经过3轮功能测试、接口测试后&#xff0c;98%的问题已经关闭&#xff0c;决定对省平台向全国平台上传数据的接口进行性能测试。 01、测试步骤 1、编写性能测试方案 由于我是刚进入此项目组不久&#xff0c;…