2014-02-28 52 views
0

我試圖檢測nodejs何時從mysql查詢中收回沒有數據。如果通過GET請求輸入的數據是正確的,它會返回所需的結果。如何檢測/指定何時沒有從nodejs查詢返回mysql數據

工作要求:

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); 
+0

檢查以確保您使用'res.send()'獲取數據,並調用'next()'以保持響應鏈繼續。 – clay

+0

你可以在next()上說明更多嗎? – user3259138

+0

查看[expressjs API](http://expressjs.com/api.html)並查找「next()」。這是真正的中間件事情,以保持響應流。你可能不需要它(至少現在)。 – clay

回答

1

因爲你res.write("no data")是內環路for...rows和沒有行,它永遠不會被調用。

相關問題