一份关于Node入门开发指北

本文详细介绍了如何在Node.js中使用fs模块进行文件读写,包括`readFile`和`writeFile`函数,并探讨了子进程管理,特别是Childprocess模块中的exec、spawn和fork方法,以及它们在异步编程中的应用。
摘要由CSDN通过智能技术生成

node全面入门教程
本文涉及内容是关于自动化工具开发使用到部分开发知识。

fs文件操作

fs模块提供了在Node.js中轻松读取文件的API。这里是逐步读取文件指南:

  1. 创建一个名为app.js的新文件。

  2. 使用require函数导入fs模块:

    const fs = require('fs');
    
  3. 使用fs.readFile函数读取文件内容:

    fs.readFile('./example.txt', 'utf8', (err, data) => {
      if (err) {
        console.error('读取文件错误:', err);
        return;
      }  
      console.log('文件内容:', data);
    });
    

使用fs模块写入文件

fs模块也提供了简单的API来写入文件。按照以下步骤写入文件:

  1. app.js中导入fs模块(如果你还没有的话):

    const fs = require('fs');
    
  2. 使用fs.writeFile函数向文件写入数据:

    const data = 'Hello, World!';
    
    fs.writeFile('./output.txt', data, 'utf8', (err) => {
      if (err) {
        console.error('写入文件错误:', err);
        return;
      }
      console.log('文件写入成功!');
    });
    

通过掌握Node.js中的文件系统(fs)模块,您可以轻松读写文件,使应用程序更具通用性和功能强大。

子进程

圈选元素时,需要重新打开新的浏览器,这个时候子进程必不可少的。
好的,我来把这篇关于Node.js子进程的西班牙文文章翻译成中文:

Node.js中的子进程(Child process)

关于Node.js进程管理的基本文章。简要概述了Child process模块和后台操作。

在Node.js中创建新进程

如今许多编程语言在其核心中包含了多种机制来生成和交互新进程。Node.js特别包含了一个名为child_process的模块,可以帮助我们完成这项工作。

一些我们可以用Node.js实例化的进程示例:

  • 打开浏览器
  • 对IP地址执行ping
  • 打开记事本
  • 执行控制台命令
  • 等等

以下是Node.js中的一个程序示例,它在操作系统中启动Google Chrome的新进程。该程序打开一个标签页并访问哔哩哔哩的地址:

const { exec } = require('child_process'); 
const os = require('os');

const platform = os.platform();
const url = "https://www.bilibili.com/";
let cmdCommand;

if (platform === "win32") {
  cmdCommand = `start chrome /new-tab ${url}`; 
} else {
  cmdCommand = `open -na 'Google Chrome' --args --new-window ${url}`;
}

exec(cmdCommand);

结果如下:

在这里插入图片描述

child process模块

child process模块为我们提供了生成新进程而不是线程的能力。该模块旨在用于长时间运行的任务和与操作系统的交互。值得注意的是,当使用此模块创建子进程时,会启动一个独立的进程,独立于Node.js的主进程,尽管它们之间是连接和通信的。

child_process模块包含了以下主要方法,这些方法将帮助我们创建、操作和执行进程:execspawnfork

这些Node.js方法的一些要点:

  • 继承自EventEmitter:因此,它们允许侦听事件,如 errorclosemessage
  • stdio标准:另外,还可以使用3个stdio标准,如 stdinstdoutstderr

注意:“child_process”本身并不打算用于线程的创建,而是用于生成新进程。

Exec

exec方法生成一个新的shell进程,并在该shell中执行命令。

在下一个示例中,我们将实例化一个shell进程,并执行ping命令以ping google.com。

const { exec } = require('child_process');

exec('ping -c 10 google.com', (error, stdout, stderr) => {

  if (error) {
    console.error(`error: ${error.message}`);
    return;
  }
  
  if (stderr) {
    console.error(`stderr: ${stderr}`);
    return;
  }
  
  console.log(`stdout:\n${stdout}`);
});

结果如下:

Pinging google.com [142.251.0.101] with 32 bytes of data:
Reply from 142.251.0.101: bytes=32 time=7ms TTL=107  
Reply from 142.251.0.101: bytes=32 time=11ms TTL=107
Reply from 142.251.0.101: bytes=32 time=11ms TTL=107 
Reply from 142.251.0.101: bytes=32 time=8ms TTL=107
Ping statistics for 142.251.0.101:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 7ms, Maximum = 11ms, Average = 9ms

注意:命令的结果保存在内存中的缓冲区中,并通过回调函数工作。

spawn

spawn方法通过流处理生成一个新的进程来执行命令。该方法旨在处理高强度的工作负载。

在下一个示例中,我们将执行 find 命令来搜索当前目录中的文件,并同时监听 stdout、stderr、error 和 close 事件。

const { spawn } = require('child_process');

const subProcess = spawn("find", ["."]);  

subProcess.stdout.on('data', (data) => {
  console.log(`stdout:\n${data}`); 
});

subProcess.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);  
});

subProcess.on('error', (error) => {
  console.error(`error: ${error.message}`);
});

subProcess.on('close', (code) => {
  console.log(`child process exit ${code}`); 
});

结果如下(当时我的文件):

stdout:  
.
./array_2D.js
child process exit 0

注意:与通过回调函数工作的 exec 不同,spawn 使用流工作。这使我们可以运行更长时间的进程,并且方式更加异步。有关这些方法的更多信息,请查看文档。

fork

fork方法生成一个新的具有父子进程之间通信功能的进程(某种意义上的父进程和子进程)。该方法旨在处理分支和汇聚。

在下一个示例中,我们将实例化一个子进程,该子进程将在5秒内(异步模拟)向父进程发送信息。

子进程(child.js)

setTimeout(() => {
  process.send("Hello father, I send this information")
}, 5000);

父进程(father.js)

const { fork } = require('child_process');

const subProcess = fork("./child.js");  

subProcess.on('message', (message) => {
  console.log(`I get this from the son: ${message}`); 
});

结果如下:

I get this from the son: Hello father, I send this information

通过 fork 创建的主进程和子进程之间的消息可以通过Node的全局对象 process 访问。 此外,通过 fork 我们可以控制子进程何时启动活动,或者从子进程向主进程返回数据,反之亦然。

Node.js子进程资源

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也想MK代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值