2017-10-03 18 views
2

私は自分のプロジェクトにExpressJS 4を使用しています。これはMVCアーキテクチャに従います。 DB(DRYアプローチ)からデータをクエリする一般的に使用される関数を書くことができるヘルパーを作成しました。これらの関数はどのコントローラからでもアクセスできます。 ヘルパー関数を呼び出してデータを渡すことはできますが、そこからデータベースを照会することはできません。nodejs-ヘルパー関数からデータを取得できません

は、ここに私のコントローラ(dumyController.js)のサンプルです:

'use strict'; 
var dbHelpers = require('../helpers/helpers'); 

exports.dummyFunction = function (req, res) { 
    var id=165; 
    var abc = dbHelpers.dummyHelperFunction(iddd); 
    console.log(abc); 
}; 

あなたは私がコントローラでヘルパー関数を呼んでいる見ることができるように。 はここに私のDB接続に何か問題があります場合は不思議に思っている場合にはヘルパー(helpers.js

var db = require('../db'); 
module.exports = { 
    dummyHelperFunction: function (passvar) { 
    var params = [passvar]; 
    var query = `SELECT email FROM members where id=?`; 
    return db.query(query, params); 
    } 
}; 

のサンプルですが、それに関連した問題はありません。それでも、(db.js

var mysql = require('mysql'); 
var connection = mysql.createPool({ 
    host: '127.0.0.1', 
    user: 'root', 
    password: '', 
    database: 'dumyDB' 
}); 
module.exports = connection; 

を共有することは、私は、MySQLのクエリによって返された結果を取得しようとしているが、これは私がそれをCONSOLE.LOGとき、私は取得していますものです。

Query { 
    domain: null, 
    _events: {}, 
    _eventsCount: 0, 
    _maxListeners: undefined, 
    _callback: undefined, 
    _callSite: 
    Error 
     at Pool.query (_PROJECT-PATH_\node_modules\mysql\lib\Pool.js:199:23) 
     at Object.dummyHelperFunction (_PROJECT-PATH_\helpers\helpers.js:18:15) 
     at exports.dummyFunction (_PROJECT-PATH_\controllers\dumyController.js:227:25) 
     at Layer.handle [as handle_request] (_PROJECT-PATH_\node_modules\express\lib\router\layer.js:95:5) 
     at next (_PROJECT-PATH_\node_modules\express\lib\router\route.js:137:13) 
     at Route.dispatch (_PROJECT-PATH_\node_modules\express\lib\router\route.js:112:3) 
     at Layer.handle [as handle_request] (_PROJECT-PATH_\node_modules\express\lib\router\layer.js:95:5) 
     at _PROJECT-PATH_\node_modules\express\lib\router\index.js:281:22 
     at Function.process_params (sam_PROJECT-PATH_ple\node_modules\express\lib\router\index.js:335:12) 
     at next (_PROJECT-PATH_\node_modules\express\lib\router\index.js:275:10), 
    _ended: false, 
    _timeout: undefined, 
    _idleNext: null, 
    _idlePrev: null, 
    _idleStart: null, 
    _idleTimeout: -1, 
    _repeat: null, 
    sql: 'SELECT email FROM members where id=?', 
    values: [ 165 ], 
    typeCast: true, 
    nestTables: false, 
    _resultSet: null, 
    _results: [], 
    _fields: [], 
    _index: 0, 
    _loadError: null } 
+1

[ 'db.query()'](https://www.npmjs.com非同期であります/ package/mysql#performing-queries)には結果を受け取ることができるコールバック関数が必要です。クエリは非同期なので、単に返すことはできません。 –

+0

私がそうした場合、コントローラー機能にはどのような変更を加える必要がありますか?私はかなりnodejs @パトリック・ロバーツ – Annabelle

+0

の新しいです[コールバックの例](https://github.com/mysqljs/mysql#introduction) – shvetsovdm

答えて

1

コードを以下のように変更しました。 db.queryは()

コントローラ

'use strict'; 
var dbHelpers = require('../helpers/helpers'); 
exports.dummyFunction = function (req, res) { 
    var user = { 
     passvar: 165 
    }; 
    dbHelpers.dummyHelperFunction(user, function (err, rows) { 
     if (err) { 
      res.json({ success: false, message: 'unable to fetch' }); 
     } 
     else { 
      res.json({ success: true, values: rows }); 
     } 
    }); 
}; 

ヘルパー

var db = require('../db'); 
module.exports = { 
    dummyHelperFunction: function (param, callback) { 
    var params = [param.passvar]; 
    var query = `SELECT email FROM members where id=?`; 
    return db.query(query, params, callback); 
    } 
}; 
+0

そこに 'return'ステートメントは必要ありません。 – alexmac

関連する問題