2015-05-18 95 views
1

我在我的本地下面的代碼:無法從模塊中返回的NodeJS +節點mysql的

/model/company.js

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : 'admin' 
}); 

module.exports = { 
    get: function(){ 
     connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
      return rows; 
     }) 
    }  
} 

/routes/company.js

var Company = require('../models/company') 


var express = require('express'); 
var router = express.Router(); 

router.route('/companies').get(function(req, res){ 

    console.log(Company.get()); 
    //res.json(Company.get()); 


}) 

我已經嘗試了一些東西,但我認爲這是應該的。 但我的console.log返回我undefined。我不知道我做錯了什麼。

如果我做的:

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
       console.log(rows) 
      }) 

它的工作原理。

我需要做什麼(或學習)?

回答

1

您的獲取函數返回undefined,因爲您沒有指定返回值。你爲你的回調函數指定了一個返回值,但是你的外部函數並不知道或關心它。如果您需要您期望的行爲,則需要將回調傳遞給您的get函數以訪問rows變量。

試試這個:如果你這樣做

module.exports = { 
    get: function(callback){ 
     connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
      // A 'node-style' callback will usually be callback(error, value) 
      callback(null, rows); 
     }) 
    }  
} 

你的console.log將工作:

Company.get(function(error, rows){ 
    console.log(rows); 
} 

對於異步行爲在JavaScript的概述,請this answer

-1

您需要返回JSON如下

get: function(){ 
     connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
      res.json(rows); 
     }) 
    }  
+2

如果是這樣的話,他還需要通過'res' ob JECT。通常,讓您的數據庫模塊知道響應對象如何工作可能不是一個好習慣。 – Brennan

1

的原因是因爲你的get功能是調用它裏面的異步函數。在你打電話給return rows的地方,它實際上是將行返回給匿名函數而不是get函數。

這基本上是你擁有的一切:

module.exports = { 
    get: function(){ 
     connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
      //This return is returning THIS function --^ 
      return rows; 
     }); 

     return; //You're not returning anything. So it's undefined like just calling return. 
    }  
} 

你想要什麼:

/model/company.js:

... 

module.exports = { 
    get: function(callback){ 
     connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
      callback(rows); 
     }) 
    }  
} 

/routes/company.js:

... 

router.route('/companies').get(function(req, res){ 
    Company.get(function (rows) { 
     console.log(rows); 
    }); 
})