2017-07-19 19 views
1

我是node.js中的新手 我寫了一個userModel模塊來使用MySQL來完成數據庫的工作,而且工作正常,但這只是第一次。當我刷新頁面MySQL數據返回nullnodejs中的mysql函數只是第一次工作

userModel.js //我的模塊

var mysql = require('mysql'); 
var con = mysql.createConnection({ 
    host: "localhost", 
    user: "root", 
    password: "", 
    database: "database" 
}); 

module.exports = { 
    allUsers: function (callback) { 
     con.connect(function (err1) { 
      if (err1){ 
       return callback(err1, null); 
      } 
      con.query("SELECT * FROM users", function (err2, result, fields) { 
       if (err2){ 
        return callback(err2, null); 
       } 
       callback(err2, result); 
      }); 
     }); 
    } 
}; 

app.js //主JS文件

var express = require('express'), 
    bodyParser = require('body-parser'), 
    _ = require('underscore'); 

var app = express(); 
var port = process.env.PORT || 8080; 
var User = require('./models/userModels'); 
var bookRouter = express.Router(); 


app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended:true})); 


bookRouter.route('/books') 

    .get(function (req, res) { 

     User.allUsers(function (err, results) { 

     var id = req.query.id; 

     var somre = _.find(results , function (param) { //result is null in second refresh 
      return param['id'] == id; 
     }); 

     console.log(results); 
     res.send(somre); 
     }); 
    }) 

app.use('/api' , bookRouter) 


app.get('/' , function (req , res) { 
    res.send('welcome to my API'); 
}); 
+0

你可以嘗試控制檯記錄err變量,看看你有什麼嗎?看起來像是出了問題。 – itsmichaelwang

+0

正確...看看'callback'的兩個調用。其中一個從字面上傳遞'null'的結果。這是什麼時候出現錯誤。嘗試用'console.log'檢查錯誤。 – Brandon

+0

@Brandon是的,我有這個錯誤'錯誤:在已經排隊握手之後不能排隊握手。「# –

回答

3

您還沒有釋放查詢之後的mySQL連接。因此,當第二次有另一個連接處於活動狀態時,您正在多次調用connect()。

+0

這對連接池來說是一個很好的用例。 – Brandon

+0

是的非常感謝 –

+0

@Brandon絕對,任何生產SQL數據庫應該使用連接池.. –