如何让nodejs与golang交谈

时间:2015-06-20 08:08:07

标签: javascript node.js mongodb go

我正在node.js和golang中创建一个Web应用程序。我需要将nodejs与golang代码连接,该代码与mongodb对话并将数据返回到节点程序。有没有办法连接呢?我尝试使用gonode API。这是我使用gonode API的代码。

我的node.js文件包含以下代码:

var Go = require('gonode').Go;
var options = {
path : 'gofile.go',
initAtOnce : true,
}

var go = new Go(options,function(err){
if(err) throw err;

go.execute({commandText: 'Hello world from gonode!'}, function(result, response) {
        if(result.ok) {
            console.log('Go responded: ' + response.responseText);
        }
});

go.close();
});     `

这是我的gofile.go文件中的代码:

package main

import(
    gonode "github.com/jgranstrom/gonodepkg"
    json "github.com/jgranstrom/go-simplejson"
)

func main(){
    gonode.Start(process)
}

func process(cmd *json.Json) (response *json.Json) {    
    response, m := json.MakeMap()

    if(cmd.Get("commandText").MustString() == "Hello") {
        m["responseText"] = "Well hello there!"
    } else {
        m["responseText"] = "What?"
    }

    return
}

这是在终端

中作为节点node.js运行时遇到的错误
events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: write EPIPE
    at errnoException (net.js:905:11)
    at Object.afterWrite (net.js:721:19)

3 个答案:

答案 0 :(得分:2)

感谢您的回复。我得到了一个解决方案。我做了两个不同的服务器。一个用于NodeJS,另一个用于Golang。我在Node服务器中调用golang uri并从golang服务器获取数据。

答案 1 :(得分:0)

基于对gonode源代码的非常草书检查,该模块似乎将代码生成为子进程并通过stdin / -out进行通信。 EPIPE错误意味着另一端关闭了流。基于此,可能是你的进程过早退出。

您可以尝试通过修改gonode / lib / command.js中的Command.prototype.execute来调试问题,以打印出发送到go进程的JSON。然后你可以直接运行它并通过stdin给它输入相同的输入来调试go程序。

答案 2 :(得分:0)

Golang从1.5开始,您可以构建转到共享对象的二进制文件(* .so)。这使您可以连接go编译的库,以供nodejs,python,ruby,java等调用。

以下是您可以参考的指南:https://medium.com/learning-the-go-programming-language/calling-go-functions-from-other-languages-4c7d8bcc69bf