初期データの作成
/_data/users.json
[
{
"_id": "5d7a514b5d2c12c7449be042",
"email": "hoge@hoge.com",
"password": "hogehohge"
},
...
]
seederの作成
node seeder.js
で動くようにします。
DB接続
seeder.js
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
useFindAndModify: false,
});
初期データファイルの読込
seeder.js
/**
* Read JSON File
*/
const projects = JSON.parse(fs.readFileSync(`${__dirname}/_data/projects.json`, "utf-8"));
const users = JSON.parse(fs.readFileSync(`${__dirname}/_data/users.json`, "utf-8"));
データの書込/削除
seeder.js
/**
* Import into DB
*/
const importData = async () => {
try {
await Project.create(projects);
await User.create(users);
process.exit();
} catch (err) {
console.error(err);
}
};
/**
* Delete Data
*/
const deleteData = async () => {
try {
await Project.deleteMany();
await User.deleteMany();
process.exit();
} catch (err) {
console.error(err);
}
};
コマンド引数で処理を指定する
node seeder.js -i
: 初期データ書込node seeder.js -d
: DBデータ全削除
seeder.js
/**
* コマンド引数で処理を指定する
* seeder.js -i -> importData
* seeder.js -d -> deleteData
*/
if (process.argv[2] === "-i") {
importData();
} else if (process.argv[2] === "-d") {
deleteData();
}
ファイル全体
seeder.js
import fs from "fs";
import mongoose from "mongoose";
import Project from "./src/models/projects";
import User from "./src/models/users";
import dotenv from "dotenv";
dotenv.config({ path: "./config/config.env" });
mongoose.connect(process.env.MONGO_URI as string, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
useFindAndModify: false,
});
/**
* Read JSON File
*/
const projects = JSON.parse(fs.readFileSync(`${__dirname}/_data/projects.json`, "utf-8"));
const users = JSON.parse(fs.readFileSync(`${__dirname}/_data/users.json`, "utf-8"));
/**
* Import into DB
*/
const importData = async () => {
try {
await Project.create(projects);
await User.create(users);
console.log("<)))><...Data imported...");
process.exit();
} catch (err) {
console.error(err);
}
};
/**
* Delete Data
*/
const deleteData = async () => {
try {
await Project.deleteMany();
await User.deleteMany();
console.log("<)))><...Data Deleted...");
process.exit();
} catch (err) {
console.error(err);
}
};
/**
* コマンド引数で処理を指定する
* seeder.js -i -> importData
* seeder.js -d -> deleteData
*/
if (process.argv[2] === "-i") {
importData();
} else if (process.argv[2] === "-d") {
deleteData();
}
npm scriptでの引数指定
ちなみに、npm run
やyarn
のスクリプトにコマンド引数を与える場合は、-(ハイフン)
を連続させます。
package.json
"scripts": {
"seed": "ts-node seeder.ts"
}
# データのインポート
$ npm run seed -- -i
# DBデータの全削除
$ npm run seed -- -d