简体   繁体   English

将 json-schema-faker 模式合并到一个文件中

[英]combining json-schema-faker schemas into one file

I'm using faker to generate multiple schemas and want to combine the resolved results into one file called./db.json not multiple files so I can use that file in json-server.我正在使用 faker 生成多个模式,并希望将解析的结果合并到一个名为 ./db.json 的文件中,而不是多个文件,因此我可以在 json-server 中使用该文件。

I have it currently setup to run and print out multiple files based on the amount of schemas are in the schema folder.我目前已将其设置为根据架构文件夹中的架构数量运行并打印出多个文件。

const path = require("path");
const fs = require("fs");
const { resolve, extend } = require("json-schema-faker");

extend("faker", () => require("@faker-js/faker"));

var schemasPath = path.join(__dirname, "./schemas");

fs.readdirSync(schemasPath).forEach((file) => {
  const name = path.parse(file).name;
  const schemas = require(`${schemasPath}/${file}`);
  resolve(schemas).then((data) => {
    fs.writeFile(`${__dirname}/${name}.json`, JSON.stringify(data), (err) => {
      if (err) {
        console.log("error = ", err.message);
      } else {
        console.log("Mock API data generated.");
      }
    });
  });
});

schema example:架构示例:

const schema = {
  type: "object",
  properties: {
    users: {
      type: "array",
      minItems: 10,
      maxItems: 10,
      uniqueItems: true,
      items: {
        type: "object",
        properties: {
          id: {
            type: "integer",
            initialOffset: 1,
            autoIncrement: true,
          },
          name: {
            type: "string",
            faker: "name.findName",
          },
        },
        required: ["id", "name"],
      },
    },
  },
  required: ["users"],
};

For anyone else who might run into this post here is how I solved it in the end.对于可能遇到这篇文章的任何其他人,这里是我最终解决它的方法。

const lodash = require("lodash");
const path = require("path");
const fs = require("fs");
const { faker } = require("@faker-js/faker");
const { resolve, extend } = require("json-schema-faker");

extend("faker", () => faker);

var schemaFolder = path.join(__dirname, "./schemas");
var schemas = [];

fs.readdirSync(schemaFolder).forEach((file) => {
  const schema = require(`${schemaFolder}/${file}`);
  schemas.push(schema);
});

const promises = schemas.map((file) => resolve(file));
Promise.all(promises)
  .then((data) => {
    const result = data.reduce((acc, curr) => {
      const key = Object.keys(curr);
      acc[key] = curr[key];
      return acc;
    }, {});
    writeToFile(result);
  })
  .catch((error) => console.log("error = ", error));

const writeToFile = (data) => {
  fs.writeFile(`${__dirname}/db.json`, JSON.stringify(data), (err) => {
    if (err) {
      console.log("error = ", err.message);
    } else {
      console.log("Mock data generated to file ./db.json");
    }
  });
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM