Node.js 如何异步地将数据推送到数组并保存

Node.js 如何异步地将数据推送到数组并保存

在本文中,我们将介绍构建一个小型Node.js应用程序的过程,该应用程序允许用户异步地将数据推送到数组并保存。本文适用于刚开始接触Node.js并想要学习如何构建基本应用程序的初学者。

异步函数是在后台运行且不阻塞主执行线程的函数。以下是 Node.js 中处理异步代码的常用方式:

  1. 回调函数: 这是在 Node.js 中处理异步代码的传统方法。回调函数是作为参数传递给另一个函数并在主函数执行完成后执行的函数。回调函数易于理解和使用,但在复杂应用程序中可能变得混乱且难以维护。
  2. Promise: Promise 是表示异步操作的完成或失败的对象。它们提供了一种更有组织且可读性更强的方式来处理异步代码。Promise 有一个 then 方法,在 promise 解析时执行,以及一个 catch 方法,在 promise 被拒绝时执行。
  3. Async/Await: 这是在 Node.js 中处理异步代码的一种更现代的方式。Async/Await 使用异步函数和 await 运算符来简化异步代码的编写。异步函数返回一个 Promise,而 await 运算符允许我们在继续下一行代码之前等待 Promise 解析。

让我们探索它们的强大之处!

创建一个项目的步骤:

步骤1: 创建一个新的项目目录并进入该目录。

mkdir async-data-pusher
cd async-data-pusher

步骤2: 使用npm初始化项目。

npm init -y

步骤3:安装所需的软件包: expressbody-parserfs

npm install express body-parser fs

步骤4: 创建两个文件,分别命名为 app.jsindex.html

项目结构:

Node.js 如何异步地将数据推送到数组并保存

示例1: 该应用程序将为用户提供一个简单的HTML界面以输入数据,并使用Node.js将数据保存到服务器上的文件中。该应用程序将使用express库来处理HTTP请求,使用body-parser库来解析传入的数据。我们还将在Node.js中使用fs模块来处理与文件系统相关的操作。

<!DOCTYPE html> 
<html> 
  
<head> 
    <title>Node App</title> 
</head> 
  
<body> 
    <h1>Create new record</h1> 
    <form action="http://localhost:3000/add" 
        id="addForm" method="post"> 
        <label for="fname">First Name</label> 
        <input type="text" name="fname" required /> 
        <br><br> 
        <label for="lname">Last Name</label> 
        <input type="text" name="lname" required /> 
        <br><br> 
        <button type="reset">Clear</button> 
        <button type="submit">Add record</button> 
    </form> 
</body> 
  
</html>

JavaScript代码

const express = require('express'); 
const bodyParser = require('body-parser'); 
const fs = require('fs'); 
  
// Create a new instance of express framework 
const app = express(); 
const port = 3000; 
  
// Use the body-parser library to parse 
// incoming JSON and URL-encoded data 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
  
const data = []; 
  
app.get('/', (req, res) => { 
    res.sendFile(__dirname + '/index.html') 
}) 
  
// Create a new endpoint for the POST method that 
// accepts data to be added to the data array 
app.post('/add', (req, res) => { 
    const record = req.body; 
    const obj = { 
        fname: record.fname, 
        lname: record.lname 
    } 
    data.push(obj); 
  
    // Write the data array to a file called data.json 
    fs.writeFile('./data.json', JSON.stringify(data),  
    (err) => { 
        if (err) { 
            console.error(err); 
            return res.status(500) 
                .send('Error saving data'); 
        } 
        res.status(200) 
            .send(`<h2>Data saved successfully :)</h2>`); 
    }); 
}); 
  
app.listen(port, () => { 
    console.log(`Server running at http://localhost:${port}`); 
});

上述代码中的异步函数是 fs.writeFile 函数,用于将数据保存到文件中。该函数接受三个参数:文件名、要写入的数据和 回调 函数,在文件写入完成后调用。 fs.writeFile 函数是 异步 的,意味着它不会阻塞主执行线程,会在后台运行。一旦文件写入完成,就会调用回调函数并将结果发送给用户。

运行应用的步骤

步骤1: 启动Node服务器或使用以下命令运行应用:

node app.js

步骤2: 在浏览器的地址栏中输入以下地址,

http://localhost:3000

输出结果:

Node.js 如何异步地将数据推送到数组并保存

解释: 输入数据后,按回车键或提交按钮。一旦数据被推送到数组中,我们就可以将其保存到文件中以供以后使用。可以使用Node.js中的 fs 模块来实现。 fs 模块允许您在Node.js中读取和写入文件。上述代码将数据保存在名为 data.json 的文件中,该文件与您的Node.js文件位于同一个目录中。

添加记录操作后的输出

Node.js 如何异步地将数据推送到数组并保存

示例2: 在这个示例中,您将学习如何在Node.js中使用 async/awaitpromise 函数来异步地将数据推送到一个数组中并保存它。这些函数允许我们以一种干净有条理的方式执行异步操作并处理错误。借助这些函数的帮助,我们可以构建更快、更高效、更易于维护的应用程序,而且在同一个项目目录中,您可以创建一个新的JavaScript文件:

index.js

const fs = require('fs'); 
  
let dataArray = []; 
  
const addData = (newData) => { 
    return new Promise((resolve, reject) => { 
        if (newData) { 
            dataArray.push(newData); 
            resolve(); 
        } else { 
            reject(new Error('Invalid data')); 
        } 
    }); 
}; 
  
const saveData = async () => { 
    try { 
        await addData({ id: 1, name: 'John' }); 
        await addData({ id: 2, name: 'Jane' }); 
        await addData({ id: 3, name: 'Jim' }); 
        fs.writeFile('./dataArray.json',  
        JSON.stringify(dataArray), (err) => { 
            if (err) throw err; 
        }); 
    } catch (err) { 
        console.error(err); 
    } 
}; 
  
saveData();

使用以下命令运行或执行代码:

node index.js

上述代码将数据保存在一个名为 dataArray.json 的文件中,该文件与您的Node.js文件在相同的目录中。

dataArray.json文件:

Node.js 如何异步地将数据推送到数组并保存

说明: 首先,我们导入了 fs 模块,它是Node.js标准库的一部分,并提供文件系统相关操作。然后,我们初始化一个名为 dataArray 的空数组,它将存储我们的数据。

addData 函数接受一个新的数据对象作为参数,并返回一个promise。该函数检查是否定义了 newData 参数。如果定义了,它将新数据推送到 dataArray 并解析该promise。如果未定义 newData ,则该promise将被拒绝并带有错误消息。

saveData 函数在使用 async 关键字声明。该 saveData 函数使用 await 运算符等待 addData 返回的promise解析后再添加下一个数据。在所有数据添加完毕后,该函数使用 fs.writeFile 函数将 dataArray 保存到一个文件中作为JSON字符串。如果在保存过程中出现任何错误,将执行 catch 块来处理错误。

在这个示例中,使用 asyncPromise 函数使代码更易读和更易于维护。它还提供了一种以有组织和易读的方式处理错误的方法。

有了这个基础,您可以在本文涵盖的概念的基础上扩展和构建更复杂和动态的应用程序。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程