我正在测试一个基于快速框架构建的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
中,无论出于何种原因,当在路由器内部调用时,simple返回空引号''
功能如下:
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 :(得分: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);
});
});