2013-07-01 27 views
1

我是新來的node.js和express框架。我應該在哪裏進行數據庫查詢以及爲什麼我沒有收到查詢的結果?

任何人都可以告訴我,如果我正確地做到這一點?

我創建了一個database.js作爲一個模塊,代碼包含:

var mysql = require('mysql'), 
dateFormat = require('dateformat'), 
db = require('./dashboard'); 

var connection = mysql.createConnection({ 
    host: 'localhost', 
    user: 'root', 
    password: '', 
    database: 'selenium', 
    timezone: '-07:00' 
}); 

exports.selectalldate = function() { 
    connection.query('SELECT * FROM date', function (err, rows, fields) { 
    if (err) { 
     console.log(err); 
    } 
    if(rows.length > 0) { 
     for(i = 0; i < rows.length; i ++) { 
     rows[i].date = dateFormat(rows[i].date, "yyyy-mm-dd") 
     } 
     return rows; 
    } else { 
     return false; 
    } 
    }); 
} 

我需要在我的app.js,當我打電話selectalldate()來獲取所有從日期數據庫在app.js中,看看結果如何。我弄不明白。我在這裏做錯了什麼?

var express = require('express') 
    , routes = require('./routes') 
    , user = require('./routes/user') 
    , http = require('http') 
    , path = require('path') 
    , fs = require('fs') 
    , file = __dirname + '/test2' 
    , get = require('./routes/get') 
    , db = require('./routes/database') 
    ; 

app.get('/dashboard', function(req, res) { 
    var datee = db.selectalldate(); 
    console.log(datee); 
    res.render('dashboard', {title: 'Selenium Dashboard', date: datee}); 
}); 

回答

1

這是因爲Node的異步性質。涉及網絡的任何事情(數據庫查詢,Web服務等)都是異步的。

因此,您應該重構您的selectalldate()方法以接受回調。從該回調中,您將能夠使用從數據庫中提取的數據成功呈現模板。

最後,它會是這樣的:

exports.selectalldate = function(callback) { 
    connection.query('SELECT * FROM date', function (err, rows, fields) { 
    if(rows.length > 0) { 
     for(i = 0; i < rows.length; i ++) { 
     rows[i].date = dateFormat(rows[i].date, "yyyy-mm-dd") 
     } 
    } 

    callback(err, rows); 
    }); 
} 

app.get('/dashboard', function(req, res) { 
    db.selectalldate(function(err, datee) { 
    if (err) { 
     // Handle the error in some way! 
     return; 
    } 

    res.render('dashboard', {title: 'Selenium Dashboard', date: datee}); 
    }); 
}); 
+0

感謝。我想我需要更多地瞭解異步和回調。我仍然對JavaScript不熟悉。我現在可以使用數據呈現模板。但是如果我想做一堆數據庫查詢,如果(!checkIfTodaysDateExists()){//插入今天的日期}然後將硒測試結果插入到數據庫中,該怎麼辦?如果我想要獲得所有硒測試結果getAllTestResults()並在模板中顯示數據怎麼辦? – yan

+0

然後就可以使用一些流量控制庫了;很多人喜歡[異步](http://npmjs.org/package/async),我個人更喜歡[Q](https://npmjs.org/package/q)。這取決於你,都可以讓你控制這種情況。 – gustavohenke

相關問題