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

Posted

技术标签:

【中文标题】在两个 Node.js 路由之间交换数据的更好方法【英文标题】:Better way of exchanging data between two Node.js routes 【发布时间】:2015-05-05 09:56:26 【问题描述】:

如果两个 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
);

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

【问题讨论】:

socket.ionode.js 路由 是两个不同的东西。你想达到什么目的。请具体。 感谢您指出这一点。我已经更新了我的问题。 【参考方案1】:

对不起,我迟到了,但我认为你想要的是进程间通信。另外,不要根据路由进行推理,而是根据微服务进行思考。所以你最终拥有的是解耦的迷你应用程序,它们可以通过 websocket、消息队列、http 等在它们之间共享数据。

阅读来自 nginx 博客的 excellent article。它是指导您构建自己的微服务过程的系列文章的一部分。

干杯,

【讨论】:

以上是关于在两个 Node.js 路由之间交换数据的更好方法的主要内容,如果未能解决你的问题,请参考以下文章

两个路由器之间如何互相访问?

为啥我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错

在传统 REST API 数据源和 Falcor 客户端之间优化 node.js falcor 路由器

在node.js中查找两个地理点(lats,longs)之间距离的最佳方法

如何用wireshark抓取两个路由器之间的数据包

交换机和路由器的区别