发布于 2026-01-06 14 阅读
0

如何使用 Node.js 在几秒钟内生成模拟数据,以便在任何应用程序中使用

如何使用 Node.js 在几秒钟内生成模拟数据,以便在任何应用程序中使用

介绍

在大多数应用程序中,您需要一些静态 JSON 数据,以便创建和测试应用程序,而无需直接使用生产数据。

如果您正在构建电子商务应用程序,您可能需要一份包含产品名称、图片和价格的产品详细信息列表来进行测试。

如果你想展示某些内容,那么首先你需要一些数据来显示在用户界面上。

截至 2020 年 8 月 20 日,Faker 的每周下载量约为 140 万次。

Faker 库

因此,在本教程中,您将看到如何使用一个非常流行的 npm 库轻松生成任意数量的所需数据faker

更新:Faker npm 包已不再可用。您可以改用faker-js,它与 faker 功能类似。

先决条件

完成本教程,您需要以下物品:

  • 本地已安装 Node.js

本教程已使用Nodev13.14.0、npmv6.14.4、fakerv4.1.0、expressv4.17.1、lodashv4.17.19 和nodemonv2.0.4版本进行验证。

安装

要安装该库及其他依赖项,请在终端中执行以下命令:

npm install faker@4.1.0 express@4.17.1 lodash@4.17.19 nodemon@2.0.4
Enter fullscreen mode Exit fullscreen mode

按以下方式导入库

const faker = require('faker');
Enter fullscreen mode Exit fullscreen mode

使用 API

以下是该库提供的一些 API 类别。

  • 地址
  • 商业
  • 公司
  • 数据库
  • 金融
  • 黑客
  • 助手
  • 图像

每个类别都提供不同的数据访问功能。

获取随机的国家、城市、州/省和邮政编码:

const country = faker.address.country(); // Singapore
const city = faker.address.city(); // Laverneberg
const state = faker.address.state(); // West Virginia
const zipCode =  faker.address.zipCode(); // 57449-4128
Enter fullscreen mode Exit fullscreen mode

获取随机产品名称、价格和颜色:

const product = faker.commerce.product(); // Table
const price = faker.commerce.price(); // 458.00
const color = faker.commerce.color(); // Cyan
Enter fullscreen mode Exit fullscreen mode

让我们用 Node.js 构建一个简单的应用程序,你提供想要的记录数,应用程序将以 JSON 格式生成相应数量的数据。

初始设置

创建一个新文件夹mock-json-data-generator并初始化package.json文件

mkdir mock-json-data-generator
cd mock-json-data-generator
npm init -y
Enter fullscreen mode Exit fullscreen mode

现在,安装fakerlodashexpressnpmnodemon

  • faker将用于生成随机模拟数据
  • lodash将用于执行函数若干次
  • express将用于创建 REST API
  • nodemon如果任何文件内容发生更改,将使用此方法重启 Express 服务器。

从该文件夹执行以下命令mock-json-data-generator

npm install faker@4.1.0 lodash@4.17.19 express@4.17.1 nodemon@2.0.4
Enter fullscreen mode Exit fullscreen mode

在文件start添加新脚本package.json

"scripts": {
 "start": "nodemon index.js"
}
Enter fullscreen mode Exit fullscreen mode

您的package.json文件现在看起来会是这样。

package.json

获取随机地址列表

创建一个新index.js文件,并在其中添加以下代码:

const express = require('express');
const faker = require('faker');
const _ = require('lodash');

const app = express();

app.get('/address', (req, res) => {
  const count = req.query.count;
  if (!count) {
    return res
      .status(400)
      .send({ errorMsg: 'count query parameter is missing.' });
  }
  res.send(
    _.times(count, () => {
      const address = faker.address;
      return {
        country: address.country(),
        city: address.city(),
        state: address.state(),
        zipCode: address.zipCode(),
        latitude: address.latitude(),
        longitude: address.longitude()
      };
    })
  );
});

app.listen(3030, () => {
  console.log('server started on port 3030');
});
Enter fullscreen mode Exit fullscreen mode

在上述文件中,

  • 首先,我们导入了所有必需的软件包。
  • 然后通过调用该express函数创建了一个 Express 应用。
const app = express();
Enter fullscreen mode Exit fullscreen mode
  • 然后创建了一条/address路线
  • 然后,我们会检查用户是否提供了count查询参数,该参数指定要返回的记录数。
const count = req.query.count;
  if (!count) {
    return res
      .status(400)
      .send({ errorMsg: 'count query parameter is missing.' });
  }
Enter fullscreen mode Exit fullscreen mode
  • 如果该对象count不存在,则会显示错误消息。
  • 然后我们使用Lodash 库times提供的方法lodash,该方法会执行指定函数count若干次。Lodash 库针对性能进行了优化,因此,map例如,要生成 1000 条记录,我们不使用数组方法,而是使用lodashLodash 库,这样响应速度会更快。
_.times(count, () => {
  const address = faker.address;
  return {
    country: address.country(),
    city: address.city(),
    state: address.state(),
    zipCode: address.zipCode(),
    latitude: address.latitude(),
    longitude: address.longitude()
  };
})
Enter fullscreen mode Exit fullscreen mode
  • times方法返回一个数组。在提供的箭头函数中,我们返回一个包含随机生成值的对象,因此该方法的输出times将是一个包含生成值的对象数组。
  • 然后我们使用send响应对象的方法发送该结果。res.send
  • 最后,我们会Express.js在端口上启动服务器。3030
app.listen(3030, () => {
  console.log('server started on port 3030');
});
Enter fullscreen mode Exit fullscreen mode

现在,请在终端中执行以下命令启动应用程序:

npm run start
Enter fullscreen mode Exit fullscreen mode

访问http://localhost:3030/address?count=10即可访问该应用程序。

地址

提示:要获得如上所示的格式化 JSON,您可以安装 JSON Formatter Google Chrome 扩展程序。

如果您不提供count查询参数,则会收到如下所示的错误。

缺少查询参数

获取随机产品列表

添加另一条/products获取产品列表的路径。

app.get('/products', (req, res) => {
  const count = req.query.count;
  if (!count) {
    return res.status(400).send({
      errorMsg: 'count query parameter is missing.'
    });
  }
  res.send(
    _.times(count, () => {
      const commerce = faker.commerce;
      return {
        product: commerce.product(),
        price: commerce.price(),
        color: commerce.color()
      };
    })
  );
});
Enter fullscreen mode Exit fullscreen mode

在这段代码中,faker.address我们没有使用 ` `,而是使用了faker.commerce` 及其相关方法`。

产品

获取随机图片列表

添加另一条/images获取图片列表的路径。

app.get('/images', (req, res) => {
  const count = req.query.count;
  if (!count) {
    return res.status(400).send({
      errorMsg: 'count query parameter is missing.'
    });
  }
  res.send(
    _.times(count, () => {
      const image = faker.image;
      return {
        image: image.image(),
        avatar: image.avatar()
      };
    })
  );
});
Enter fullscreen mode Exit fullscreen mode

图片

获取随机单词列表

添加另一条/random路径以获取随机单词列表。

app.get('/random', (req, res) => {
  const count = req.query.count;
  if (!count) {
    return res.status(400).send({
      errorMsg: 'count query parameter is missing.'
    });
  }
  res.send(
    _.times(count, () => {
      const random = faker.random;
      return {
        word: random.word(),
        words: random.words()
      };
    })
  );
});
Enter fullscreen mode Exit fullscreen mode

在这段代码中,我们使用了faker.random及其相关方法。

字

获取随机用户列表

添加另一/users条路由以获取随机用户列表。

app.get('/users', (req, res) => {
  const count = req.query.count;
  if (!count) {
    return res.status(400).send({
      errorMsg: 'count query parameter is missing.'
    });
  }
  res.send(
    _.times(count, () => {
      const user = faker.name;
      return {
        firstName: user.firstName(),
        lastName: user.lastName(),
        jobTitle: user.jobTitle()
      };
    })
  );
});
Enter fullscreen mode Exit fullscreen mode

在这段代码中,我们使用了faker.name及其相关方法。

随机用户

获取随机 Lorem Ipsum 文本列表

添加另一条/lorem路线以获取随机 lorem ipsum 段落列表。

app.get('/lorem', (req, res) => {
  const count = req.query.count;
  if (!count) {
    return res.status(400).send({
      errorMsg: 'count query parameter is missing.'
    });
  }
  res.send(
    _.times(count, () => {
      const lorem = faker.lorem;
      return {
        paragraph: lorem.paragraph(),
        sentence: lorem.sentence(),
        paragraphs: lorem.paragraphs()
      };
    })
  );
});
Enter fullscreen mode Exit fullscreen mode

在这段代码中,我们使用了faker.lorem及其相关方法。

Lorem Ipsum

获取随机用户信息列表

Faker该库还提供了一组辅助函数,例如createCard,,userCardcreateTransaction

添加另一条/userCard路线,以获取包含用户信息(如姓名、电子邮件、地址、网站、公司)的随机卡片列表。

app.get('/userCard', (req, res) => {
  const count = req.query.count;
  if (!count) {
    return res.status(400).send({
      errorMsg: 'count query parameter is missing.'
    });
  }
  res.send(
    _.times(count, () => {
      const helpers = faker.helpers;
      return {
        userCard: helpers.userCard()
      };
    })
  );
});
Enter fullscreen mode Exit fullscreen mode

在这段代码中,我们使用了faker.helpers它的userCard方法。

用户卡

除了上述用户详细信息外,如果我们想要获取用户的帖子和交易详情,可以使用createCard辅助方法。

除了其他详细信息外,还要添加另一/createCard条路由来获取用户帖子和交易数据。

app.get('/createCard', (req, res) => {
  const count = req.query.count;
  if (!count) {
    return res.status(400).send({
      errorMsg: 'count query parameter is missing.'
    });
  }
  res.send(
    _.times(count, () => {
      const helpers = faker.helpers;
      return {
        createCard: helpers.createCard()
      };
    })
  );
});
Enter fullscreen mode Exit fullscreen mode

在这段代码中,我们使用了faker.helpers它的createCard方法。

创建卡片

Faker还提供了很多其他详细信息,您可以在此网址查看。

结论

正如你所见,该Faker库提供了许多 API 函数,可以轻松生成随机数据。当你想要快速构建某些东西,而又不想浪费数小时来创建要使用的数据时,它也非常有用。

您可以在这里找到此应用程序的完整源代码

别忘了订阅我的每周新闻简报,直接在您的收件箱中接收精彩的技巧、窍门和文章。点击此处订阅。

文章来源:https://dev.to/myogeshchavan97/how-to-generate-mock-data-within-seconds-using-node-js-2e4l