Node.js中的可读和可写流
你好。在本教程中,我们将解释Node.js应用程序中的可读和可写流。
1.1.简介
Node中的流是帮助你在目标源中写入和读取数据的对象。在node.js中,有四种不同类型的流:
- 可读--流用于读取操作
- 可写--用于写操作的流
- 双工--流用于读和写操作
- 变换- 双工流的类型,输出是根据输入来计算的。
每个流由几个事件发射器事件组成,在不同的时间发射:
- 数据- 当有数据可供读取时,事件被触发
- 结束- 当没有更多的数据可供读取时,事件被触发
- 错误- 当接收或写入数据出现错误时触发事件
- 完成- 当所有的数据都被刷新时,事件被触发。
1.1 设置Node.js
要在Windows上设置Node.js,你需要从这个链接下载安装程序。点击你的平台的安装程序(也包括NPM包管理器),运行安装程序,开始Node.js设置向导。按照向导的步骤操作,完成后点击 "完成"。如果一切顺利,你可以导航到命令提示符来验证安装是否成功,如图1所示。
图1: 验证node和npm的安装
2.Node.js中的可读和可写流
为了设置应用程序,我们将需要导航到我们的项目所在的路径。对于编程的东西,我正在使用Visual Studio Code作为我的首选IDE。你可以自由选择你喜欢的IDE。
2.1 设置实现
让我们写下实际学习中需要的不同文件。
2.1.1 设置依赖项
导航到项目目录,运行npm init -y ,创建一个package.json 文件。这个文件持有与项目有关的元数据,用于管理项目的依赖关系、脚本、版本等。在该文件中添加以下代码,我们将指定所需的依赖性。
{
"name": "streamdata",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"faker": "^5.5.3",
"nodemon": "^2.0.13"
}
}
要下载依赖项,请导航到包含该文件的目录路径,并使用npm install 命令。如果一切顺利,依赖项将被加载到node_modules 文件夹中,你就可以进行下一步了。
2.1.2 创建控制器
在根文件夹中,在索引文件中添加以下内容。该文件将暴露2个端点 --
/write创建一个可写流并将模拟数据写入文件/read创建一个可读流并从文件中读取数据
const http = require("http");
const fs = require("fs");
const faker = require("faker");
const file = "data.txt";
const server = http.createServer(function (req, resp) {
if (req.method === "POST" && req.url === "/write") {
// http://localhost:5001/write
console.log("writing data to stream.");
const writeStream = fs.createWriteStream(file);
for (let i = 0; i <= 1000; i++) {
writeStream.write(faker.lorem.words(20) + "\n");
}
writeStream.end();
resp.end();
} else if (req.method === "GET" && req.url === "/read") {
// http://localhost:5001/read
console.log("reading data.");
// getting data in a single chunk
/* fs.readFile(file, (err, data) => {
if (err) throw err;
resp.end(data);
}); */
// doing data streaming
var data = "";
const readStream = fs.createReadStream(file);
readStream.on("data", (chunk) => {
console.log("chunk data received.");
data += chunk;
});
// method will be called when no more data is available for read.
readStream.on("end", () => {
resp.end(data);
});
} else {
throw new Error("NOT_YET_IMPLEMENTED");
}
});
// start app
const PORT = process.env.PORT || 5001;
server.listen(PORT, () => {
console.log(`Server started on port ${PORT}`);
});
3.运行应用程序
要运行该应用程序,请导航到项目目录,并输入以下命令,如图2所示。如果一切顺利,应用程序将在从.env 文件或5001 读取的端口号上成功启动。
Fig. 2: 启动应用程序
4.演示
你可以自由地使用postman或你选择的任何其他工具来向应用程序的端点发出HTTP请求。
// http post - http://localhost:5001/write
// http get - http://localhost:5001/read
以上就是本教程的全部内容,我希望这篇文章能为你提供你想要的东西。祝你学习愉快,不要忘记分享!
5.总结
在本教程中,我们解释了Node.js应用程序中的可读和可写流。

