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