Node.js中的可读和可写流介绍

91 阅读3分钟

Node.js中的可读和可写流

你好。在本教程中,我们将解释Node.js应用程序中的可读和可写流。

1.1.简介

Node中的流是帮助你在目标源中写入和读取数据的对象。在node.js中,有四种不同类型的流:

  • 可读--流用于读取操作
  • 可写--用于写操作的流
  • 双工--流用于读和写操作
  • 变换- 双工流的类型,输出是根据输入来计算的。

每个流由几个事件发射器事件组成,在不同的时间发射:

  • 数据- 当有数据可供读取时,事件被触发
  • 结束- 当没有更多的数据可供读取时,事件被触发
  • 错误- 当接收或写入数据出现错误时触发事件
  • 完成- 当所有的数据都被刷新时,事件被触发。

1.1 设置Node.js

要在Windows上设置Node.js,你需要从这个链接下载安装程序。点击你的平台的安装程序(也包括NPM包管理器),运行安装程序,开始Node.js设置向导。按照向导的步骤操作,完成后点击 "完成"。如果一切顺利,你可以导航到命令提示符来验证安装是否成功,如图1所示。

Writable Streams in Node.js - npm installation

图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 读取的端口号上成功启动。

Writable Streams in Node.js - starting the app

Fig. 2: 启动应用程序

4.演示

你可以自由地使用postman或你选择的任何其他工具来向应用程序的端点发出HTTP请求。

// http post - http://localhost:5001/write
// http get - http://localhost:5001/read

以上就是本教程的全部内容,我希望这篇文章能为你提供你想要的东西。祝你学习愉快,不要忘记分享!

5.总结

在本教程中,我们解释了Node.js应用程序中的可读和可写流。