在开发过程中如何处理播种数据库?在开发过程中使用模拟数据时,您会不断地发现自己重置DB,清理或手动添加条目,最终才能再次清除它,等等...
如果听起来像您,这是一个小型应用程序,可以帮助您。
假设您有一个存储在服务器端的文件中的对象(模拟数据)。
const mockUsers = [
{
username: "fakemedic",
email: "med@med.com",
password: "$2b$10$h036pK1tWvpYRB3Evbq9j.nk57Zh.OwWtzHXTQhgBbaRhS4LIitsC",
avatar:
"https://images.unsplash.com/photo-1463453091185-61582044d556?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8cmFuZG9tJTIwcGVyc29ufGVufDB8fDB8fA%3D%3D&w=1000&q=80",
},
{
username: "freesoul",
email: "free@free.com",
password: "$2b$10$h036pK1tWvpYRB3Evbq9j.nk57Zh.OwWtzHXTQhgBbaRhS4LIitsC",
avatar:
"https://images.unsplash.com/photo-1438761681033-6461ffad8d80?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8cGVyc29ufGVufDB8fDB8fA%3D%3D&w=1000&q=80",
},
{
username: "DaBom",
password: "$2b$10$h036pK1tWvpYRB3Evbq9j.nk57Zh.OwWtzHXTQhgBbaRhS4LIitsC",
email: "dabom@dabom.com",
avatar:
"https://images.unsplash.com/photo-1500648767791-00dcc994a43e?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxzZWFyY2h8MzR8fHBlcnNvbnxlbnwwfHwwfHw%3D&w=1000&q=80",
},
{
username: "lastcaique",
email: "lastcaique@lastcaique.com",
password: "$2b$10$h036pK1tWvpYRB3Evbq9j.nk57Zh.OwWtzHXTQhgBbaRhS4LIitsC",
avatar:
"https://st2.depositphotos.com/3143277/8644/i/600/depositphotos_86446164-stock-photo-business-man-in-office.jpg",
},
];
为了使魔术实现,我们将使用process.argv
我亲自为我的播种机/清晰的seed.js
命名文件。
让我们现在开始工作:
- 我们需要我们将使用的模拟数据以及Mongoose,Dotenv和模型。
const { mockUsers } = require("../db/mock_data");
const mongoose = require("mongoose");
require("dotenv").config();
const { User, Post } = require("../models/models");
2-存储一个连接:
const connection = async () => {
mongoose.set("strictQuery", false);
await mongoose
.connect(process.env.DB_URI, { useNewUrlParser: true })
.then(() => console.log("DB READY TO SEED"))
.catch((err) => console.log(err));
};
3-现在我们创建了第一个功能,就我而言是种子。我们调用连接函数,然后在完成时简单地创建,退出过程:
const seedDB = async () => {
await connection();
await User.create(mockUsers)
.then(() => console.log("Users seeded"))
.catch((err) => console.log(err));
process.exit();
};
4-到目前为止,没有什么新鲜的(希望)...因此,让我们创建另一个可以清除DB的功能:
const clearDB = async () => {
await connection();
await User.deleteMany()
.then(() => console.log("Users deleted"))
.catch((err) => console.log(err));
process.exit();
};
5-最后,argv
将处理这些功能,可以随意遵守。
您将获得一个带有索引0和1的路径的数组
node seed.js --my_flag
此日志将其标志为process.argv[2]
,允许我们在package.json
上编写脚本进行播种并清除:
package.json:
"scripts": {
"start": "NODE_ENV=production node server/index.js",
"dev": "nodemon server/index.js",
"seedDB": "node server/db/seed.js --seedDB",
"clearDB": "node server/db/seed.js --clearDB"
},
最后:基于标志,我们将调用我们创建的函数:
if (process.argv[2] === "--seedDB") {
seedDB();
} else if (process.argv[2] === "--clearDB") {
clearDB();
}
完成!使用脚本进行种子并清除您需要=)