我在使用服務器端React來顯示我的Mongo數據庫中的玩家列表時遇到了問題。如何在服務器端React組件中使用回調值?
我的目標是從mongodb
和react
不使用外部庫一邊,因爲我想了解基本概念之前,我開始實施先進的解決方案。
我的代碼需要一個模塊(players.js
)並調用index.jsx
中定義的應該處理Mongo查詢結果的回調函數。這些過程結果應該可以由組件訪問。
這就是:
players.js
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/collection';
var database;
var players;
module.exports = function(callback) {
// Initialize collection
MongoClient.connect(url, function(err, db) {
database = db;
database.collection('players', findPlayers);
});
// This named callback function is here in case
// I want to do anything else with the collection
function findPlayers(err, collection) {
collection.find({}, getCursor);
}
function getCursor(err, cursor) {
cursor.toArray(function(err, players) {
// Invoke callback with err and players array
callback(err, players);
// Close Mongo connection
database.close();
});
}
}
index.jsx
var React = require('react');
var players = require('./players');
// call module and pass processPlayers function
var competitors = players(processPlayers);
// with the query results, return some neat JSX code
function processPlayers(err, results) {
return results.map(function(player) {
return (
<tr>
<td>{ player.rank }</td>
<td>{ player.name }</td>
</tr>
)
});
}
// Create index component class
var Index = React.createClass({
render: function() {
return (<main><table>{ competitors }</table></main>);
}
});
// Export component
module.exports = Index;
我明白,在index.jsx
我設置competitors
未定義的回報,但那是因爲我卡住了。如何將competitors
設置爲映射結果?
再次,我是不是尋找承諾或異步庫。 我想了解基礎知識和正確的代碼結構。如果提供了相關的庫源代碼,我甚至會很高興。
謝謝!