使用 JavaScript 轻松创建虚假数据
什么是 Faker.js
生成用户数据
使用种子
概括
你是否曾经需要填充表格或生成一些数据来查看你的图形用户界面 (GUI) 在使用时的效果?需要测试应用程序在高负载下的性能?需要做一个演示,但由于是预发布版本,你没有任何有效数据来进行演示?
在这种情况下,程序员通常有两种选择:
- 手动输入数据
- 编写你自己的种子应用程序,让它为你完成所有操作。
这两种方案都不理想。手动输入数据非常耗时。编写自己的种子数据应用程序也并非易事,你需要了解生成随机文本、虚拟图像、随机日期、姓名、电子邮件等的过程。
什么是 Faker.js
隆重推出Faker.js,一个帮助您生成数据并初始化应用程序的出色解决方案。Faker.js 既可在浏览器中使用,也可在 Node.js 环境中使用。Faker 已经考虑到并解决了生成随机数据时遇到的所有问题和难题(部分问题已在上文列出),因此我们无需再浪费时间重复造轮子。
生成用户数据
我能想到的最常见的场景——也是几周前工作中遇到的情况——是生成用户数据。我们来创建一个简单的 Node 应用,它会发出一个GET/ users请求,返回一个生成的用户列表。为了简化本文,我将忽略分页的复杂性,只返回一个包含 100 个用户的数组。
const express = require("express");
const app = express();
app.listen(3000, () => {
console.log("Server running on port 3000");
});
app.get("/users", (req, res, next) => {
res.json([
{
"name": "Douglas Adams",
"email": "douglas@gmail.com",
"postcode": "pe22 22a",
"phoneNumber": "07428233312",
"city": "London",
"country": "England",
"favouriteQuote": "The answer is 42"
}
]);
});
所以如果我们调用端点GET http://localhost:3000/users:
回复:
[
{
"name": "Douglas Adams",
"email": "douglas@gmail.com",
"postcode": "pe22 22a",
"phoneNumber": "07428233312",
"city": "London",
"country": "England",
"favouriteQuote": "The answer is 42"
}
]
这是我们想要生成的数据的基本格式。让我们使用 Faker 来帮我们完成这项工作。
Faker 非常简单,你只需要浏览一下他们的README.md 文件就能很好地理解他们的结构。基本上,它包含一个对象列表,你可以引用这些对象,每个对象都有你可以调用的方法。例如,有一个对象,它address有如下方法:
zipCode()
zipCodeByState()
city()
cityPrefix()
citySuffix()
// and a load more
所以,要获取一个随机邮政编码,我只需要拨打以下电话:
faker.address.zipCode()
让我们把它整合到代码中:
npm install faker
const express = require("express");
const faker = require('faker');
const app = express();
app.listen(3000, () => {
console.log("Server running on port 3000");
});
app.get("/users", (req, res, next) => {
res.json([
{
"name": faker.name.findName(),
"email": faker.internet.email(),
"postCode": faker.address.zipCode(),
"city": faker.address.cityName(),
"country": faker.address.country(),
"phoneNumber": faker.phone.phoneNumber(),
"favouriteQuote": faker.lorem.sentence()
}
]);
});
所以现在当我发出请求时,它返回的响应是:
[
{
"name": "Darnell Marquardt",
"email": "Braden_Block@gmail.com",
"postCode": "56653",
"city": "Mount Vernon",
"country": "Paraguay",
"phoneNumber": "987-214-5854 x674",
"favouriteQuote": "Harum veritatis est dolore amet nam debitis."
}
]
如果我再运行一次,就会得到不同的结果:
[
{
"name": "Victoria Kerluke V",
"email": "Valentin.Beahan@hotmail.com",
"postCode": "15058",
"city": "Kendall",
"country": "Serbia",
"phoneNumber": "751.325.8108 x50407",
"favouriteQuote": "Deserunt rerum maiores."
}
]
接下来,我们来更新代码,使其实际返回一个包含 100 个用户的数组:
app.get("/users", (req, res, next) => {
res.json(getUsers());
});
function getUsers() {
let users = [];
for (let i = 0; i < 100; i++) {
users.push({
"name": faker.name.findName(),
"email": faker.internet.email(),
"postCode": faker.address.zipCode(),
"city": faker.address.cityName(),
"country": faker.address.country(),
"phoneNumber": faker.phone.phoneNumber(),
"favouriteQuote": faker.lorem.sentence()
})
}
return users;
}
回复:
[
{
"name": "Sandra Schaefer",
"email": "Bethany12@yahoo.com",
"postCode": "65665",
"city": "Palm Harbor",
"country": "Slovakia (Slovak Republic)",
"phoneNumber": "379-607-0449",
"favouriteQuote": "Qui consectetur repellendus commodi."
},
{
"name": "Mark Veum",
"email": "Jedediah.Beer26@yahoo.com",
"postCode": "89859",
"city": "Montebello",
"country": "Myanmar",
"phoneNumber": "779.494.2905 x0531",
"favouriteQuote": "Corrupti assumenda enim alias suscipit maxime molestiae quis laboriosam."
},
// you get the idea..
使用种子
设想这样一个场景:你正在演示新用户页面,点击打开页面,系统发出一个 GET 用户请求,返回一些随机用户。你在页面上停留了一会儿,大家逐渐熟悉了表格中的用户名称。然后你离开页面去修改一些配置。当你返回页面时,系统再次发出 GET 用户请求,返回的却是不同的随机用户。“桑德拉去哪儿了?”有人问道。
我最喜欢Faker的一点是,它允许你使用随机种子,这意味着每次调用都能得到一致的结果。如果你自己生成随机数据,你很可能不会实现这一点,至少我不会。
让我们在请求中使用种子:
app.get("/users", (req, res, next) => {
faker.seed(123);
res.json(getUsers());
});
现在每次我发出请求,返回的数据都相同:
首次访问用户页面:
[
{
"name": "Clara Keebler",
"email": "Maryse_Lubowitz49@gmail.com",
"postCode": "79465",
"city": "Lancaster",
"country": "Burundi",
"phoneNumber": "536.734.2063",
"favouriteQuote": "Id harum sit odio quia vitae provident."
},
{
"name": "Kristin Nicolas",
"email": "Roslyn_Kulas61@gmail.com",
"postCode": "74363",
"city": "Guaynabo",
"country": "Czech Republic",
"phoneNumber": "496-807-4041",
"favouriteQuote": "Sequi molestiae beatae enim necessitatibus molestiae."
},
// etc
返回用户页面:
[
{
"name": "Clara Keebler",
"email": "Maryse_Lubowitz49@gmail.com",
"postCode": "79465",
"city": "Lancaster",
"country": "Burundi",
"phoneNumber": "536.734.2063",
"favouriteQuote": "Id harum sit odio quia vitae provident."
},
{
"name": "Kristin Nicolas",
"email": "Roslyn_Kulas61@gmail.com",
"postCode": "74363",
"city": "Guaynabo",
"country": "Czech Republic",
"phoneNumber": "496-807-4041",
"favouriteQuote": "Sequi molestiae beatae enim necessitatibus molestiae."
},
// etc
概括
生成随机数据是所有程序员迟早都要面对的任务。有了 Faker.js,一切都变得轻松多了。它既npm install可以用于 Node 应用,也可以添加到你的前端解决方案中。如果你需要一些数据,但还没有后端来提供这些数据,那么 Faker.js 就是你的最佳选择。
希望您喜欢这篇博客。如果您奇迹般地喜欢上了我的絮叨,那就去我的博客网站 codeheir.com 看看吧,我每周都会在那里写博客,内容涵盖编程世界中所有吸引我注意力的话题!
文章来源:https://dev.to/lukegarrigan/create-fake-data-easily-using-javascript-4mkj