2017-10-15 54 views
1

我想通过脚本(JS),通过我运行通过npm run填充我的MongoDB数据库与数据。我的Mongoose数据播种脚本有什么问题?

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: "[email protected]", 
    password: "foo", 
    balance_cents: 100 
    }, 
    { 
    _id: "58c03ada8060197ca0b52d52", 
    email: "[email protected]", 
    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.. 

并且数据库中没有对象。我使用的是与在教程中找到的完全相同的语法,并且无法理解为什么这不起作用。 任何想法的人?我想这是一个非常愚蠢的错误,我现在看不到。谢谢!

+0

你可以只运行拖放数据库函数与try catch user.remove ?? – Sathish

回答

1

在致电process.exit(0)之前,您的代码并未等待dropDatabase()seedUsers()完成。

您需要将这两个调用包装在另一个可以等待完成的async方法中。

async function doBoth() { 
    await dropDatabase(); 
    await seedUsers(); 
    process.exit(0); 
} 

doBoth(); 

但是,您可能不需要致电process.exit(0),但这是一个单独的问题。