Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用curl查询jayson(nodejs)_Node.js_Curl - Fatal编程技术网

Node.js 如何使用curl查询jayson(nodejs)

Node.js 如何使用curl查询jayson(nodejs),node.js,curl,Node.js,Curl,我试图弄明白如何使用CURL查询nodej的“jayson”npm包。我正在服务器端使用下面的测试程序。节点正常运行,并以错误输出响应Curl。无法找到在Curl中应传递的内容或节点程序上应更改的内容: var jayson = require(__dirname + '/../..'); var server = jayson.server({ echo: function(msg, callback) { if(msg != null) callback(null,

我试图弄明白如何使用CURL查询nodej的“jayson”npm包。我正在服务器端使用下面的测试程序。节点正常运行,并以错误输出响应Curl。无法找到在Curl中应传递的内容或节点程序上应更改的内容:

var jayson = require(__dirname + '/../..');
var server = jayson.server({
  echo: function(msg, callback) {
    if(msg != null)
      callback(null, msg);
  },
  add: function(a, b, callback) {
    if( (a!= null) && (b!= null) )
      callback(null, a + b);
  }
});
server.http().listen(90);
这是CURL命令:

$ curl -v -i -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "id":"curltest", "method":"echo", "params": ["hello"] }' http://localhost:90
如果Curl命令不符合jayson,则这是Curl收到的nodejs应答:

* About to connect() to localhost port 90 (#0)
*   Trying 127.0.0.1...
* connected
* Connected to localhost (127.0.0.1) port 90 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.28.1
> Host: localhost:90
> Accept: */*
> Content-Type: application/json
> Content-Length: 16
>
* upload completely sent off: 16 out of 16 bytes
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Content-Length: 79
Content-Length: 79
< Content-Type: application/json
Content-Type: application/json
< Date: Tue, 25 Mar 2014 19:26:21 GMT
Date: Tue, 25 Mar 2014 19:26:21 GMT
< Connection: keep-alive
Connection: keep-alive

<
* Connection #0 to host localhost left intact
{"jsonrpc":"2.0","id":null,"error":{"code":-32600,"message":"Invalid request"}}* Closing connection #0
*即将()连接到本地主机端口90(#0)
*正在尝试127.0.0.1。。。
*连接的
*已连接到本地主机(127.0.0.1)端口90(#0)
>POST/HTTP/1.1
>用户代理:curl/7.28.1
>主机:本地主机:90
>接受:*/*
>内容类型:application/json
>内容长度:16
>
*上传已完全发送:16个字节中的16个
*HTTP 1.1或更高版本,支持持久连接和流水线
非常感谢你的帮助,
Rémi

您正在从windows运行curl。这就是为什么围绕参数的单引号不适用于您。将它们更改为双引号:

curl -i -X POST -H "Content-Type: application/json" -d "{\"echo\": \"Name\"}" http://localhost:90/?

另外,尝试在命令末尾附加
-v
。它将向您显示curl的调试消息。如果msg对您不起作用,请显示给我们。

我找到了窍门,并已更正了上面的错误。我们应该遵从jsonrpc2.0,因为Jayson只考虑jsonrpc2

这是“echo”脚本的正确curl命令行:

这是“添加”脚本的正确curl命令行:


好的,谢谢你的邀请!对了,我用的是Cygwin的Curl。不幸的是,你的修正给了我同样的错误。我已根据您的建议更新了描述。@user1680283您的curl命令正常。不是,是由
node.js
boss来处理这个问题的!
$ curl -v -i -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "id":"curltest", "method":"echo", "params": ["hello"] }' localhost:90 
$ curl -v -i -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "id":"curltest", "method":"add", "params": [1, 2] }' http://localhost:90