【问题标题】:Why does json-schema-faker return Latin for everything?为什么 json-schema-faker 对所有内容都返回拉丁语?
【发布时间】:2018-10-21 23:21:06
【问题描述】:

使用以下架构:

还有一个非常简单的package.json,唯一的依赖是json-schema-faker (0.5.0.rc16),当我运行以下代码时,我看到底部显示的输出(运行示例)

jsf = require('json-schema-faker');
var schema = {
  "type": "object",
  "properties": {
    "users": {
        "type": "array",
        "minItems": 3,
        "maxItems": 5,
        "items": {
          "type": "object",
          "properties": {
              "id": {
                  "type": "integer",
                  "unique": true,
                 "minimum": 1
              },
              "firstName": {
                  "type": "string",
                  "faker": "name.findName"
              },
              "lastName": {
                  "type": "string",
                  "faker": "name.lastName"
              },
              "email": {
                "type": "string",
                "faker": "internet.email"
              }
          },
         "required": ["id", "firstName", "lastName", "email"]
        }
      }
    }, 
    "required": ["users"]  
};

var mylist = jsf.generate(schema);
console.log("mylist: ", mylist);

输出

mylist:  { users:
[ { id: 46919647,
   firstName: 'commodo ut deserunt',
   lastName: 'magna',
   email: 'ex minim irure' },
 { id: 36864773,
   firstName: 'aliquip elit laborum',
   lastName: 'co',
   email: 'nisi Ut laboris dolore' },
 { id: 62231151,
   firstName: 'adipisicing id reprehenderit exercitation',
   lastName: 'tempor culpa deserunt Excepteur nisi',
   email: 'est enim' },
 { id: 57427341,
   firstName: 'eu ullamco reprehenderit mollit',
   lastName: 'cupidatat ut non',
   email: 'id dolore sed et' } ] }

为什么一切都是拉丁文?我在这里做错了什么。

【问题讨论】:

  • 使用基于 Web 的工具 json-schema-faker.js.org 表明您的架构符合预期,并且就我所见,示例代码与您的相同。您是否考虑过在 github 存储库上记录问题?

标签: javascript jsonschema json-schema-faker


【解决方案1】:

同样的事情也发生在我身上。我跟随 Cory House 在pluralSight 上的“构建java 脚本开发环境”课程。为了与所有依赖项保持同步,我更新到了最新的 json-schema-faker 版本 0.5.0-rc16。

这打破了 json 的生成,我的一切都变得拉丁文了。当我恢复到版本 0.3.6 时,我可以正确生成名字、姓氏和电子邮件。

这是我使用的架构:

  export const schema = {
  "type": "object",
  "properties": {
    "users": {
      "type": "array",
      "minItems": 3,
      "maxItems": 5,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "unique": true,
            "minimum": 1
          },
          "firstName": {
            "type": "string",
            "faker": "name.firstName"
          },
          "lastName": {
            "type": "string",
            "faker": "name.lastName"
          },
          "email": {
            "type": "string",
            "faker": "internet.email"
          }
        },
        "required": ["id", "firstName", "lastName", "email"]
      }
    }
  },
  "required": ["users"]
};

这里是对应的java脚本:

import jsf from 'json-schema-faker';
import {schema} from './mockDataSchema';
import fs from 'fs';
import chalk from 'chalk';

const json = JSON.stringify(jsf(schema));

fs.writeFile("./src/api/db.json", json, function (err) {
  if (err) {
    return console.log(chalk.red(err));
  } else {
    console.log(chalk.green("Mock data generated."));
  }
});

输出

{
    "users": [{
            "id": 49569377,
            "firstName": "Gerald",
            "lastName": "Turcotte",
            "email": "Eda_Lemke66@hotmail.com"
        },

        {
            "id": 84739169,
            "firstName": "Jerad",
            "lastName": "Gerhold",
            "email": "Reynold.Ryan@yahoo.com"
        },

        {
            "id": 78507259,
            "firstName": "Hayden",
            "lastName": "Schultz",
            "email": "Kassandra64@yahoo.com"
        }
    ]
}

但说了这么多,现在开始工作,经过一番谷歌搜索,我找到了这个

0.5.0-RC2 possible bug with faker 'date.past' #275

所以我对 package.json 进行了这些更改:

"json-schema-faker": "^0.5.0-rc16",
"faker": "^4.1.0",

并清除了我的 node_modules 文件夹和 package-lock.json 文件并进行了干净的 npm 安装。

我把上面的代码改成这个,然后重新运行脚本,结果成功了。

jsf.extend('faker', () => require('faker'));
const json = JSON.stringify(jsf.generate(schema));

错误报告指出

您好,从 0.5.x 开始,所有外部生成器(chance、faker 等)都不是内置的,因此您需要注册为文档

希望这对你有用。

【讨论】:

  • 我和你乔一样。我花了很长时间才弄清楚这里发生了什么,这确实有助于解决问题。
  • 我也是!干得好!
  • 非常感谢。在 Pluralsight 课程之后被同一个阻挡者击中。这为我解决了问题。
【解决方案2】:

添加到@joe 的答案。我采取了以下步骤

  1. npm install --save-dev faker json-schema-faker
  2. 在数据生成器文件中我像这样扩展了json-schema-faker
import faker from 'faker'

jsf.extend('faker', () => {return faker});
const json = JSON.stringify(jsf.generate(mockUserSchema));

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 1970-01-01
    • 2020-03-01
    • 2019-12-11
    • 2015-01-23
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多