Javascript 如何在服务器端组件中使用回调值?

Javascript 如何在服务器端组件中使用回调值?,javascript,node.js,mongodb,reactjs,callback,Javascript,Node.js,Mongodb,Reactjs,Callback,我在使用服务器端React显示Mongo数据库中的玩家列表时遇到问题 我的目标是不使用mongodb和react之外的外部库,因为我想在开始实施高级解决方案之前先了解基本概念 我的代码需要一个模块(players.js)并调用index.jsx中定义的回调,该回调应该处理Mongo查询结果。组件应该可以访问这些过程结果 这是: players.js var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://lo

我在使用服务器端React显示Mongo数据库中的玩家列表时遇到问题

我的目标是不使用
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;
var React=require('React');
变量玩家=要求('./玩家');
//调用模块和passprocessplayers函数
var竞争者=参与者(ProcessPlayer);
//在查询结果中,返回一些整洁的JSX代码
函数ProcessPlayer(错误、结果){
返回结果.map(函数(播放器){
返回(
{player.rank}
{player.name}
)
});
}
//创建索引组件类
var Index=React.createClass({
render:function(){
返回({竞争对手});
}
});
//导出组件
module.exports=索引;
我知道在
index.jsx
中,我将
competitors
设置为未定义的回报,但那是因为我被卡住了。如何将
竞争对手
设置为映射结果

同样,我不是在寻找承诺或异步库。我想学习基础知识和正确的代码结构。如果提供了相关的库源代码,我甚至会很高兴看到


谢谢大家!

我正在发布我问题的答案

可以找到我用于React服务器端版本的库

在文档中,我发现
.jsx
视图是同步的,建议我在路由中传递数据库查询结果。此数据将通过
This.props
作为组件中的属性公开

所以。。。我进入我的路线文件并更改了原始代码:

module.exports = function (req, res) {
    res.render('index');
}
为此:

var players = require('../helpers/players');

module.exports = function (req, res) {
    // call to module with anonymous function callback
    players(function(err, results) {
        if (err) return console.log(err);
        // using arg from anonymous function and
        // passing as local variable
        res.render('index', {'players': results});
    })
};
现在我的组件渲染方法如下所示

render: function() {

    function createPlayerRows(player) {
        return (
            <tr>
                <td>{ player.rank }</td>
                <td>{ player.name }</td>
            </tr>           
        );
    }

    // `players` property provided by route
    // mapped array using callback function which
    // creates an array of JSX elements
    var players = this.props.players.map(createPlayerRows);

    return ( <main><table>{ players }</table></main> );
}
render:function(){
函数createPlayerRows(播放器){
返回(
{player.rank}
{player.name}
);
}
//“玩家”由路线提供的财产
//使用回调函数映射数组
//创建JSX元素的数组
var players=this.props.players.map(createPlayerRows);
返回({players});
}
我不确定这是否能帮助任何人,但我确信我松了一口气