我正在尝试通过通过 npm run
运行的脚本 (JS) 用数据填充我的 MongoDB 数据库。
const mongoose = require('mongoose')
const dbConf = require('../config/database.js')
const User = require('../app/models/user.js')
const Account = require('../app/models/account.js')
mongoose.connect(dbConf.url, { useMongoClient: true })
mongoose.Promise = global.Promise
const users = [
{
_id: "58c039018060197ca0b52d4c",
email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e693958394d7a6839e878b968a83c885898b" rel="noreferrer noopener nofollow">[email protected]</a>",
password: "foo",
balance_cents: 100
},
{
_id: "58c03ada8060197ca0b52d52",
email: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="07727462753547627f666a776b622964686a" rel="noreferrer noopener nofollow">[email protected]</a>",
password: "foo",
balance_cents: 50000
}
]
const accounts = [
{
name: "Postbank",
iban: "1232423423",
swift: "2444444"
},
{
name: "DKB",
iban: "1234923423",
swift: "6667898"
},
{
name: "Fidor",
iban: "909873423",
swift: "998733"
}
]
async function dropDatabase () {
console.log('Removing User collection')
await User.remove()
console.log('Success!')
}
async function seedUsers () {
console.log('Seeding users..')
try {
await User.insertMany(users)
console.log('Success!')
} catch(error) {
console.log('Error:' + e)
}
}
dropDatabase()
seedUsers()
process.exit(0)
但它似乎没有超越每个函数中的 await
语句。输出为:
Removing User collection
Seeding users..
并且数据库中没有对象。我使用的语法与我在教程中找到的语法完全相同,但无法理解为什么这不起作用。 有人有什么想法吗?我想这是一个非常愚蠢的错误,我现在还没有看到。谢谢!
最佳答案
在调用 process.exit(0)
之前,您的代码不会等待 dropDatabase()
和 seedUsers()
完成。
您需要将这两个调用包装在另一个可以等待其完成的async
方法中。
async function doBoth() {
await dropDatabase();
await seedUsers();
process.exit(0);
}
doBoth();
但是,您可能不需要调用 process.exit(0)
,但这是一个单独的问题。
关于node.js - 我的 Mongoose 数据播种脚本有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46756227/