在两个Node.js路由之间交换数据的更好方法

时间:2015-05-05 09:56:27

标签: javascript node.js socket.io

如果在两个Node.js路由之间存在优化的通信方式,那将是有益的吗? 我主要使用Express而且我不知道Express模块​​,它提供了这样的功能。我不确定我是否错过了正确的框架或正确的NPM脚本。 我知道这个功能可以通过简单的Ajax实现,但我正在寻找更清晰的解决方案,例如websockets。我使用socket.io,但它似乎专注于客户端和服务器之间的通信,而不是两台服务器之间的通信。

更新 - 我想要实现的目标? 而不是将我需要的所有请求放在一个文件中,例如:

router.post('/entode', function(req, res) {
        var word_rf = req.body.word1;
        if( /^[a-zA-Z]+$/g.test( word_rf ) && word_rf.length<18 ) {
            entode.entode_function_rf(word_rf, function (res1) {
                io.sockets.emit('series_results', res1);
                res.send('done');
            });
        } else {
            io.sockets.emit('error_rf', 'incorrect input');
            res.send('done');
        }
    });
    //-------------------------
    router.post('/yandex_short', function(req, res) {
        var word_rf = req.body.word1;
    ...
    });
    //-------------------------
    router.post('/yandex_long', function(req, res) {
        var word_rf = req.body.word1;
    ...
    });

我更喜欢这样的东西:

router.post('/', function(req, res) {
    var word_rf = req.body.word1;
    var aPromise = new Promise(function(resolve,reject) {
        makeRequestFn('./some_route/'+word_rf,function(returnedData){
            resolve(returnedData)    
        });
    });
    aPromise.then(function(data) {
        io.sockets.emit('series_results', data);
        res.send('done');
    });
    //The other routes stay inside this scope
});

通过这种方式,我不需要模块,因为我将逻辑直接传输到其他文件。

1 个答案:

答案 0 :(得分:0)

抱歉,我迟到了,但我认为你想要的是进程间通信。而不是在路线方面的推理,考虑微服务。所以你最终得到的是解耦的迷你应用程序,可以通过websocket,消息队列,http等在它们之间共享数据。

从NGINX博客阅读此excellent article。它是系列文章的一部分,将指导您完成构建自己的微服务的过程。

干杯,