2014-10-02 17 views
0

我正在測試一個構建在express框架上的nodeJS服務器。節點應用程序的響應沒有任何迴應,但應返回數組

當向服務器發送請求時,服務器應該以數組的形式發回一些數據。相反,它將發回''

,我試圖通過測試如下:

it('should send postgres data to the server', function(done) { 
    request(app) 
    .post('/chart') 
    .send({min:"1",max:"100",arrayLength:"12"}) 
    .expect(200, sqlData) 
    .end(function(err, res){ 
    if(err) { 
     done(err); 
    } else { 
     done(); 
    } 
    }); 
}); 

注意SQLDATA等於發送響應應該是什麼。

當路由器收到它下面的POST請求:

router.post('/', function(req, res) { 
    res.send(randomSqlTableSelector(req.body.min,req.body.max,req.body.arrayLength)); 
}); 

我已經檢查了req.body.min,max和arrayLength都是我期望他們成爲數字。

因此,這個問題很可能在我的功能randomSqlTableSelector,其中,無論出於何種原因,路由器的內部調用時,簡單的返回空引號''

的功能如下:

function randomSqlTableSelector(min,max,arrayLength) { 
    var filledArray = []; 
    pg.connect(conString, function(err, client, done) { 
     if(err) { 
      return console.error('error fetching client from pool', err); 
     } 
     client.query('SELECT cell1 FROM random AS retrievedNumber;', function(err, result) { 
      var psqlData = result.rows; 
      for (i in psqlData) { 
       filledArray.push(psqlData[i]["cell1"]) 
      } 
      return filledArray 
     }); 
    }); 
} 
+0

發生這種情況,因爲你的數據庫連接的東西是異步的,所以你的randomSql功能實際上是在返回前,你認爲它是。 – 2014-10-02 20:08:09

回答

2

您不能將執行異步,非阻塞任務的函數視爲同步和阻塞。嘗試在回調中傳遞,而不是:

function randomSqlTableSelector(min, max, arrayLength, cb) { 
    pg.connect(conString, function(err, client, done) { 
    if (err) 
     return cb(err); 
    client.query('SELECT cell1 FROM random AS retrievedNumber;', function(err, result) { 
     if (err) 
     return cb(err); 
     var psqlData = result.rows, 
      filledArray = [], 
      i; 
     for (i in psqlData) 
     filledArray.push(psqlData[i]["cell1"]) 
     cb(null, filledArray); 
    }); 
    }); 
} 

然後使用它就像你的路線:

router.post('/', function(req, res) { 
    var min = req.body.min, 
     max = req.body.max, 
     len = req.body.arrayLength; 
    randomSqlTableSelector(min, max, len, function(err, array) { 
    if (err) { 
     console.log(err); 
     return res.send(500); 
    } 
    res.send(array); 
    }); 
}); 
+0

太棒了!這工作很好。 – maudulus 2014-10-02 21:53:28

相關問題