最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何多次获取数据expressJS

IT培训 admin 6浏览 0评论

如何多次获取数据expressJS

我想同时显示聊天机器人和Facebook数据。怎么显示它?因为当我尝试在浏览器中运行但它没有出现任何东西。我试图在stackoverflow上查找它,但没有得到正确的参考

route.js

app.get('/cpanel/facebook', function(req, res) {
        if (req.session.user == null) {
            res.redirect('/cpanel/login');
        }   else {
            CB.getAllRecords( function(e, chatbot) {
                res.render('cpanel/facebook', { udata : req.session.user, chatbot : chatbot });
            });
            FBM.getAllRecords( function(e, facebook) {
                res.render('cpanel/facebook', { udata : req.session.user, facebook : facebook });
            });
        }
    });

facebook.js

var facebook = db.collection('facebook');

exports.addNewFacebook = function(newData, callback) {
    facebook.findOne({accesstoken:newData.accesstoken}, function(e, o) {
        if (o) {
            callback('accesstoken-taken');
        }   else {
            facebook.insert(newData, {safe: true}, callback);
        }
    });
}

exports.getAllRecords = function(callback) {
    facebook.find().toArray(
        function(e, res) {
            if (e) callback(e)
            else callback(null, res)
        }
    );
}

chatbot.js

var chatbot = db.collection('chatbot');

exports.addNewChatBot = function(newData, callback) {
    chatbot.insert(newData, {safe: true}, callback);
}

exports.getAllRecords = function(callback) {
    chatbot.find().toArray(
        function(e, res) {
            if (e) callback(e)
            else callback(null, res)
        }
    );
}
回答如下:

在node.js中管理异步操作的更简单方法,尤其是当您要协调多个操作时,使用Promises而不是普通回调。而且,幸运的是,mongodb现在支持所有异步操作的基于promise的接口。

因此,首先更改您的方法以返回承诺而不是进行回调:

var chatbot = db.collection('chatbot');

exports.getAllRecords = function() {
    return chatbot.find().toArray();
}

var facebook = db.collection('facebook');

exports.getAllRecords = function() {
    return facebook.find().toArray();
}

然后,您可以使用Promise.all()的这些承诺来协调:

app.get('/cpanel/facebook', function(req, res) {
    if (req.session.user == null) {
        res.redirect('/cpanel/login');
    } else {
        Promise.all([CB.getAllRecords(), FBM.getAllRecords()]).then(results => {
            res.render('cpanel/facebook', { udata : req.session.user, chatbot : results[0], facebook: results[1]});
        }).catch(err => {
            // render some error page here
            res.sendStatus(500);
        });
    }
});

要调用只返回promise的单个函数,可以使用.then()

app.get('/cpanel/facebook', function(req, res) {
    if (req.session.user == null) {
        res.redirect('/cpanel/login');
    } else {
        FBM.getAllRecords().then(results => {
            res.render('cpanel/facebook', { udata : req.session.user, facebook: results});
        }).catch(err => {
            // render some error page here
            res.sendStatus(500);
        });
    }
});

如何多次获取数据expressJS

我想同时显示聊天机器人和Facebook数据。怎么显示它?因为当我尝试在浏览器中运行但它没有出现任何东西。我试图在stackoverflow上查找它,但没有得到正确的参考

route.js

app.get('/cpanel/facebook', function(req, res) {
        if (req.session.user == null) {
            res.redirect('/cpanel/login');
        }   else {
            CB.getAllRecords( function(e, chatbot) {
                res.render('cpanel/facebook', { udata : req.session.user, chatbot : chatbot });
            });
            FBM.getAllRecords( function(e, facebook) {
                res.render('cpanel/facebook', { udata : req.session.user, facebook : facebook });
            });
        }
    });

facebook.js

var facebook = db.collection('facebook');

exports.addNewFacebook = function(newData, callback) {
    facebook.findOne({accesstoken:newData.accesstoken}, function(e, o) {
        if (o) {
            callback('accesstoken-taken');
        }   else {
            facebook.insert(newData, {safe: true}, callback);
        }
    });
}

exports.getAllRecords = function(callback) {
    facebook.find().toArray(
        function(e, res) {
            if (e) callback(e)
            else callback(null, res)
        }
    );
}

chatbot.js

var chatbot = db.collection('chatbot');

exports.addNewChatBot = function(newData, callback) {
    chatbot.insert(newData, {safe: true}, callback);
}

exports.getAllRecords = function(callback) {
    chatbot.find().toArray(
        function(e, res) {
            if (e) callback(e)
            else callback(null, res)
        }
    );
}
回答如下:

在node.js中管理异步操作的更简单方法,尤其是当您要协调多个操作时,使用Promises而不是普通回调。而且,幸运的是,mongodb现在支持所有异步操作的基于promise的接口。

因此,首先更改您的方法以返回承诺而不是进行回调:

var chatbot = db.collection('chatbot');

exports.getAllRecords = function() {
    return chatbot.find().toArray();
}

var facebook = db.collection('facebook');

exports.getAllRecords = function() {
    return facebook.find().toArray();
}

然后,您可以使用Promise.all()的这些承诺来协调:

app.get('/cpanel/facebook', function(req, res) {
    if (req.session.user == null) {
        res.redirect('/cpanel/login');
    } else {
        Promise.all([CB.getAllRecords(), FBM.getAllRecords()]).then(results => {
            res.render('cpanel/facebook', { udata : req.session.user, chatbot : results[0], facebook: results[1]});
        }).catch(err => {
            // render some error page here
            res.sendStatus(500);
        });
    }
});

要调用只返回promise的单个函数,可以使用.then()

app.get('/cpanel/facebook', function(req, res) {
    if (req.session.user == null) {
        res.redirect('/cpanel/login');
    } else {
        FBM.getAllRecords().then(results => {
            res.render('cpanel/facebook', { udata : req.session.user, facebook: results});
        }).catch(err => {
            // render some error page here
            res.sendStatus(500);
        });
    }
});

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论