2017-09-13 102 views
1

在服務器端返回數據庫中的數據,我從數據庫中提取數據如何在HTTP GET方法

var sql = require('mssql'); 

app.get('/api/comments', function(request, response) { 

var sqlConfig = { 
// Connection string parameters. 
} 

    sql.connect(sqlConfig, function() { 
     var request = new sql.Request(); 
     var stringRequest = 'select TOP 10 * from comment'; 
     request.query(stringRequest, function(err, recordset) { 
     if(err) console.log(err); 
     sql.close(); 
     response.json(recordset); 
     }); 
    }); 
}); 

然後,我通過AJAX(get方法)取從服務器端的數據

_fetchComments() { 
    jQuery.ajax({ 
    method: 'GET', 
    url: '/api/comments', 
    success: (comments) => { 
    this.setState({ comments }) 
} 
}); 

當我通過Ajax獲取數據時出現錯誤。 (Uncaught TypeError:this.state.comments.map不是函數) 看起來數據返回是未定義的。取代數據庫,代碼是工作的,如果我在服務器端使用靜態數據(硬代碼)。

我認爲問題是sql.connect()中的回調函數,但我不知道如何解決它。任何人都可以提供幫助嗎?

錯誤:enter image description here

+1

您使用的反應是?什麼是包含_fetchComments函數? –

+0

您可以在成功回調中添加** comments **變量的值,還可以添加setState()函數的代碼。 –

+1

什麼是生成錯誤的代碼?請告訴我們該代碼。我的猜測是,你正在嘗試訪問'this.state.comments.map'之前,你的ajax調用已經完成。它是異步的,只有當它完成時才知道是在ajax回調中。 – jfriend00

回答

0

該解決方案將數據類型: 'JSON' 到AJAX

_fetchComments() { 
    jQuery.ajax({ 
    method: 'GET', 
    url: '/api/comments', 
    dataType: 'json', 
    success: (comments) => { 
    this.setState({ comments }) 
} 
}); 
}