如何检测/指定何时从nodejs查询返回没有mysql数据

时间:2014-02-28 19:28:33

标签: mysql json node.js express

我正在尝试检测nodejs何时从mysql查询中没有收到任何数据。如果通过GET请求的数据是正确的,它会返回所需的结果。

工作要求:

http://server.com:8000?a=userinfo&user=datathatmatchesvalueindb

非工作申请

http://server.com:8000?a=userinfo&user=datathatdoesn'tmatchanythinginthedb

非工作,我的意思是如果请求包含不在mysql表中的数据,它会显示一个空白页面,而不是“无数据”所需的结果。

在PHP中,如果要检测mysql行中是否没有数据,可以执行以下操作:

if($res->num_rows === 0)
{
    echo 'no data';
} else {
//Do you functions here
}

是否存在nodejs代码的等价物?

这是我写的代码:

var express = require('express');
var app = express();
var database = require('mysql-simple');

app.get('/', function(req, res){

database.init('user', 'pass', 'db', 'IP');
var data = '';
if (req.query.a == 'userinfo') {
var q = 'SELECT * FROM `addrbook` WHERE `key` =\''+req.query.user+'\'';
} else if (req.query.a == 'facebook') {
var q = 'SELECT * FROM `addrbook` WHERE `facebook` =\''+req.query.fb+'\' OR `facebookp` =\''+req.query.fb+'\'';
} else if (req.query.a == 'youtubeurl') {
var q = 'SELECT * FROM `addrbook` WHERE `youtubeurl1` =\''+req.query.url+'\' OR     `youtubeurl2` =\''+req.query.url+'\' OR `youtubeurl3` =\''+req.query.url+'\'';
} else {
var q = 'SELECT * FROM `addrbook` WHERE `key` =\''+req.query.user+'\'';
}
database.query(q, function(err, rows, fields)
{
   if (err) {
    console.log('error fetching user data: ' + err);
    return;
  }
    //console.log(results);
   for (var i = 0; i < rows.length; i++) {
    var row = rows[i];
    if(rows.length > 0) {
        var key = row['key'];
        var fb = row['facebook'];
        var daddr = row['addr'];
        if (req.query.a == 'userinfo') {

        data = JSON.stringify(row);
        res.write(data);

        } else if (req.query.a == 'facebook') {

        data = JSON.stringify(daddr);
        res.write(data);

        } else if (req.query.a == 'youtubeurl') {

        data = JSON.stringify(daddr);
        res.write(data);

        } else {
        res.write('no data');
        }
    } else {
        res.write('no data');
        console.log('no data');
    }
   }
    res.end();
});

});
app.listen(8000);

1 个答案:

答案 0 :(得分:1)

由于您的res.write("no data")位于循环for...rows内,并且没有行,因此永远不会调用它。