2017-10-15 56 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),但這是一個單獨的問題。