如何使Node.js与Golang对话

我正在用node.js和golang创建一个Web应用程序。 我需要使用与mongodb对话并将数据返回到节点程序的golang代码连接nodejs。 有什么办法可以连接吗? 我尝试使用gonode API。这是我使用gonode API的代码。</ p>

我的node.js文件包含以下代码:</ p>

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

var go =新的Go(options,function(err){\ nif(err)throw err;

go.execute({commandText:'来自gonode的Hello world!'},function(result,response){
if(result.ok){
console.log('Go 响应:'+ response.responseText);
}
});

go.close();
});

</ code> </ pre>

这是我gofile.go文件中的代码:</ p>

 包main 

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

func main(){
gonode.Start(process)
} \ n
func process(cmd * json.Json)(响应* json.Json){
响应,m:= json.MakeMap()

if(cmd.Get(“ commandText”)。MustString()= =“ Hello”){
m [“ responseText”] =“你好!”
}其他{
m [“ responseText”] =“什么?”
}

return
}
</ code> </ pre>

这是在终端中作为节点node.js运行时遇到的错误</ p>

  events.js:72 \  n投掷者;  //未处理的“错误”事件
^
错误:在errnoException(net.js:905:11)处写入EPIPE
在Object.afterWrite(net.js:721:19)

</ code> < / pre>
</ div>

展开原文

原文

I am creating a web app in node.js and golang. I need to connect nodejs with golang code which talks to mongodb and returns data to node program. is there any way to connect so? I tried to use gonode API.This is my code using gonode API.

my node.js file contains below code:

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();
});     `

And this is the code in my gofile.go file:

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
}

This is the error am getting while running as node node.js in terminal

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个回答



感谢您的答复。 我为此找到了解决方案。 我做了2台不同的服务器。 一个用于NodeJS,另一个用于Golang。 我正在节点服务器中呼叫golang uri并从golang服务器获取数据。</ p>
</ div>

展开原文

原文

thanks for the response. I got a solution for this. I made 2 different servers. One for NodeJS and another for Golang. I am calling golang uri in Node server and getting data from golang server.



基于对gonode源代码的非常草率的检查,该模块似乎将go代码作为子进程生成并通过stdin / 退房手续。 EPIPE错误意味着另一端关闭了流。 基于此,您的go进程可能会过早退出。</ p>

您可以尝试通过修改gonode / lib / command.js中的Command.prototype.execute来打印出 发送到执行流程的JSON。 然后,您可以通过直接运行go程序并通过stdin提供相同的输入来调试go程序。</ p>
</ div>

展开原文

原文

Based on a very cursive check of the gonode source code, the module seems to spawn go code as a child process and communicate through stdin/-out. EPIPE error means that the other end closed the stream. Based on this it might be that your go process exits prematurely.

You could try to debug the problem by modifying Command.prototype.execute in gonode/lib/command.js to print out the JSON that's sent to the go process. Then you can debug the go program by running it directly and giving it the same input via stdin.

dr200166
dr200166 此外,go代码示例的工作方式似乎与您的代码不同。 在函数的开头,它调用response = make(gonode.CommandData),在if语句中,响应的分配方式如下:response [“ text”] =“ What?”。 对go知之甚少,但似乎您的变量m并未真正链接到任何东西。 npmjs.com/package/gonode
5 年多之前 回复



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

此处是您可以参考的指南: https://medium.com/learning-the-go- 编程语言/从其他语言中调用功能4c7d8bcc69bf </ p>
</ div>

展开原文

原文

Golang from 1.5, you can build go to shared object binary file (*.so). This allows you to connect your go compiled library to be called by nodejs, python, ruby, java etc.

Here is a guide you could refer to: https://medium.com/learning-the-go-programming-language/calling-go-functions-from-other-languages-4c7d8bcc69bf

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐