2017-11-08 9 views
0

は私が保存db-conn.jsを持っている私のfunctiondb connectionは、その後、私はcreate.jsファイルでそれをrequirecallそれを。私が欲しいものNode.js内の別の関数のコールバックとして関数を渡すには?

は、それにcallbackように、コードの残りの部分をpassすることになるので、まずそれconnectsデータベースにして、それがinsertionを行います。

私がコールバックをよくしていないので、私はそれを行う方法を知らない。手伝っていただけませんか?

ので、このDB-conn.js:

var mongo = {} 
/**************************************************/ 
mongo.doConnection = (fcallback) => { 
    mongo = require('mongodb').MongoClient 
    global.db = null 
    sDatabasePath = 'mongodb://localhost:27017/kea' 
    global.mongoId = require('mongodb').ObjectID 

    /**************************************************/ 
    mongo.connect(sDatabasePath, (err, db) => { 
     if (err) { 
      console.log('ERROR 003 -> Cannot connect to the database') 
      return false 
     } 
     global.db = db 
     console.log('OK 002 -> Connected to the database') 
    }) 
} 
/**************************************************/ 
module.exports = mongo 

と、これはcreate.jsです:

var mongo = require(__dirname + '/db-conn.js') 
/**************************************************/ 
mongo.doConnection()// I am not sure what to do here 
createStudent =() => { 
    var jStudent = 
     { 
      "firstName": "Sarah", 
      "lastName": "Jepsen", 
      "age": 27, 
      "courses": [ 
       { 
        "courseName": "Web-development", 
        "teachers": [ 
         { 
          "firstName": "Santiago", 
          "lastName": "Donoso" 
         } 
        ] 
       }, 

       { 
        "courseName": "Databases", 
        "teachers": [ 
         { 
          "firstName": "Dany", 
          "lastName": "Kallas" 
         }, 
         { 
          "firstName": "Rune", 
          "lastName": "Lyng" 
         } 
        ] 
       }, 
       { 
        "courseName": "Interface-Design", 
        "teachers": [ 
         { 
          "firstName": "Roxana", 
          "lastName": "Stolniceanu" 
         } 
        ] 
       } 
      ] 
     } 
    global.db.collection('students').insertOne(jStudent, (err, result) => { 
     if (err) { 
      var jError = { "status": "error", "message": "ERROR -> create.js -> 001" } 
      console.log(jError) 
     } 
     var jOk = { "status": "ok", "message": "create.js -> saved -> 000" } 
     console.log(jOk) 
     console.log(JSON.stringify(result)) 
    }) 
} 

答えて

1

Connectは、DB-conn.jsに仕上がっているあなたが呼び出す必要がありますfcallbackコールバック

mongo.connect(sDatabasePath, (err, db) => { 
    if (err) { 
     console.log('ERROR 003 -> Cannot connect to the database') 
     return fcallback(err, null); 
    } 
    global.db = db 
    console.log('OK 002 -> Connected to the database') 
    return fcallback(null, db); 
}) 

あなたは、接続が完了したときに呼び出されますmongo.doConnection(...)にパラメータとしてコールバック関数を追加する必要がjsの後で、このコールバックで

(fcallbackが呼び出される)を作成し、あなたがcreateStudent意志を確保することができます接続が終了すると呼び出されます。

mongo.doConnection((err, db) => { 
    if(err){ 
     console.error("error connection to db: " + err; 
     return; 
    } 
    createStudent =() => { 
     var jStudent = 
      { } ... 

}); 
+0

mongo.doConnectionを実行するときに接続のエラーを再度指定する必要がありますか?冗長ではありませんか? – codeDragon

+0

あなたはしません。冗長です。エラーファーストのコールバックは最初のパラメータの後にあり、2番目のパラメータはデータなので、それに従っています。両方のparamsを無視し、 'return fcallback();'を 'mongo.doConnection'で削除することもできます。 –

+0

これは私がやったことです。 ...そしてcreate.jsで 'createStudent()'を定義した後に 'mongo.doConnection(createStudent)'を実行するだけで、完全に動作します。ありがとうございます。 – codeDragon

関連する問題