2017-05-14 58 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; })'並在你的回調函數中處理你的數據。 –