2017-05-14 11 views
-1

私はウェブサイト上でソートを検索していましたが、これまでユーザーのために働いていたものを見つけ出し、コールバック関数を使ってテストする方法をコピーしようとしましたクエリの結果を返すには問題はありますが、問題があります。ここに私のコードはnode-mysqlコールバックは関数ではありません

dbfunctions.js

const connection = require('../helpers/connection'); 

    function getUserInfo(userID, dynamicField, callback) { 
    var query = connection.query("SELECT * FROM subgutter WHERE name = 'random'"); 
    query.on('result', function(row) { 
     callback(null, "row.dynamicField"); 
    }); 
    }; 

    module.exports = getUserInfo(); 

g.js

const express = require('express'); 
const router = express.Router(); 
const connection = require('../helpers/connection'); 
const dbfunctions = require('../helpers/dbfunctions.js'); 

dbfunctions.getUserInfo(8, "test", function(err, result) { 
    console.log(err || result); 
}); 

これはコールバック関数

ないdbfunctions.jsに私に を与えているのです

誰かが私がこの質問を改善する方法を教えてもらえれば、なぜ投票が下がったのか分かりません。

+0

'on result'イベントトリガの中でコールバックが未定義であるかどうか確認してください。 –

+0

はいそれは未定義です、なぜこれが分かりますか? – Tony

答えて

2

getUserInfomodule.exports.getUserInfo = getUserInfo;またはmodule.exports = {getUserInfo:getUserInfo}としてエクスポートする必要があります。あなたの場合、module.exportsはgetUserInfo()の結果であり(引数なしで呼び出されます)、これによりエラーがスローされます。

+0

これは動作しますが、フォローアップの質問があります。変数をグローバルにすることなく、コールバックの結果を変数に設定する方法はありますか? 'let gutterId = null; dbfunctions.gutterNameToId( "random"、function(result){ gutterId = result; }); ' – Tony

+0

変数を指定したスコープで定義すると、そのスコープにのみアクセスできます。あなたの例では、gutterIdはグローバルですが、 'function(result){let gutterId = result; }) 'を呼び出し、コールバック関数でデータを処理します。 –

関連する問題