Skip to content

pre-save hooks doesn't make sense when use db.load() #116

@ray0324

Description

@ray0324
//db.js
import Database from "warehouse";
import path from "path";
import fs from "fs";


const dbpath = path.resolve("./db.json");

const db = new Database({ path: dbpath });

await db.load();

console.log("db loaded...");

export default db;
//category.js
import Database from "warehouse";
import db from "./db.js";

const { Schema } = Database;

const schema = new Schema({
  name: { type: String, required: true },
});

schema.pre("save", async (data) => {
  const { name, parent } = data;
  if (!name) return;
  const categories = db.model("categories");
  const cat = await categories.findOne({ name });
  if (cat) {
    throw new Error(`Category \`${name}\` has already existed!`);
  }
});

const Category = db.model("categories", schema);

export default Category;
// cli.js
import Category from "./category.js";
import db from "./db.js";

const cat = await Category.save({ name: "Javascript" });

console.log("saved:", cat);

db.save();
//db.json repeat so much!!!
{
  "meta": { "version": 0, "warehouse": "4.0.0" },
  "models": {
    "posts": [],
    "categories": [
      { "name": "Javascript", "_id": "ckwkujczh0000587nh75rhpcl" },
      { "name": "Javascript", "_id": "ckwkuqnr10000io7nb3ocey48" },
      { "name": "Javascript", "_id": "ckwkuqqpm0000u07n4gxg94r1" },
      { "name": "Javascript", "_id": "ckwkus0pb0000887nal5m0mxh" },
      { "name": "Javascript", "_id": "ckwkus2op0000dw7n5twndlvm" },
      { "name": "Javascript", "_id": "ckwkus3ko0000x07n36056e7i" },
      { "name": "Javascript", "_id": "ckwkus48c0000w47n962sfmfo" },
      { "name": "Javascript", "_id": "ckwkusz930000bg7n2rsm792b" }
    ]
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions