将 json-schema-faker 架构合并到一个文件中

发布于 2025-01-16 02:08:47 字数 1373 浏览 3 评论 0原文

我正在使用 faker 生成多个模式,并希望将解析的结果合并到一个名为 ./db.json 的文件中,而不是多个文件中,这样我就可以在 json-server 中使用该文件。

我当前将其设置为根据架构文件夹中的架构数量运行和打印多个文件。

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.");
      }
    });
  });
});

架构示例:

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"],
};

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.

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"],
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

幸福还没到 2025-01-23 02:08:47

对于可能遇到这篇文章的其他人来说,这里是我最终解决它的方法。

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");
    }
  });
};

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");
    }
  });
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文