我有一个简单的cURL(我认为这是对的)将一个小的JSON对象发布到我的快速服务器上:
curl -d "{'test': 'this'}" localhost:3000/rest/user/authenticate
我已明确表示:
// set up body parsing in express to be able to get parse JSON posts
server.use(express.json());
server.use(express.urlencoded());
并拥有接受路线的处理程序:
JSON = require('JSON')
module.exports = {
authenticateUser: function create(req, res){
var postedObject = req.body
console.log(postedObject)
res.send('Handle Post: authenticateUser');
}
}
处理程序被调用,但它正在意外地记录JSON主体:
{ '{\'test\': \'this\'}': '' }
所以我的整个对象看起来是JSON Name:Value对象的名称。无论我发布什么,它似乎都附加了价值方面。除非我做这样的事情:
curl -d "a=a" localhost:3000/rest/user/authenticate
记录:
{'a':'a'}
所以我没有设置正确的标题?配置快递错了吗?我计划挖掘快速代码,但想知道在找到解决方案之前是否有人可能知道。无论哪种方式,在网络上对此进行搜索/索引答案都会很好。
好的我需要将标题添加到cURL
curl -H "Content-Type: application/json" -d "{'test': 'this'}" localhost:3000/rest/user/authenticate
给出错误:
Parsing: {'test': 'this'}
SyntaxError: Unexpected token '
at Object.parse (native)
at C:\blah\node_modules\express\node_modules\connect\lib\middleware\json.js:86:19
at IncomingMessage.onEnd (C:blah\node_modules\express\node_modules\connect\node_modules\raw-body\index.js:109:7)
at IncomingMessage.g (events.js:180:16)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at _stream_readable.js:920:16
at process._tickCallback (node.js:415:13)
OR curl -H“Content-Type:application / json”-d“{test:'this'}”localhost:3000 / rest / user / authenticate
给出错误:
Parsing: {test: 'this'}
SyntaxError: Unexpected token t
at Object.parse (native)
at C:\blah\node_modules\express\node_modules\connect\lib\middleware\json.js:86:19
at IncomingMessage.onEnd (C:blah\node_modules\express\node_modules\connect\node_modules\raw-body\index.js:109:7)
at IncomingMessage.g (events.js:180:16)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at _stream_readable.js:920:16
at process._tickCallback (node.js:415:13)
在文件connect / lib / middleware / json.js
中这条线似乎是造成问题的那条
req.body = JSON.parse(buf, options.reviver);
我真的认为这是我的cURL
buf= JSON.stringify({test: 'This'});
console.log(buf)
req.body = JSON.parse(buf, options.reviver);
首先进行日志记录 { “测试”: “这个”}
然后在我的处理程序中:
----------------------
{ test: 'this' }
----------------------
答案 0 :(得分:24)
1)JSON中间件仅在请求具有Content-Type: application/json
标头时才有效
2)有效的JSON应包含"
,而不是'
所以它应该是'{"test": "this"}'
而不是"{'test': 'this'}"
尝试此命令:
curl -d '{"test": "this"}' -H "Content-Type: application/json" localhost:3000/rest/user/authenticate
答案 1 :(得分:6)
答案有两部分
经历了正确传递json的痛苦,我的windows机器上的cURL没有处理单引号和双引号的交换,因此正确的cURL是
curl -H“Content-Type:application / json”-d“{”“”test“”“:”“”this“”“}}”localhost:3000 / rest / user / authenticate
< / LI> 醇>是的,在数据参数内部,您需要使用三个双引号向服务器发送一个双引号。
接受zub的回答,因为他是对的。我正在尝试一堆东西绕过这里的窗户。
答案 2 :(得分:2)
对于那些使用像我这样的邮递员的人,只需尝试发送请求为POST&gt;&gt; RAW并创建你的Json来做帖子,在我的测试中我创建了一个像这样的简单json并且有效:
{ &#34; name&#34;:&#34; test&#34; }
使用form-data或x-www-form-urlencoded,它不起作用。
答案 3 :(得分:0)
在Windows cmd:
下curl -H "Content-Type: application/json" -d "{"""test""": """this"""}" localhost:3000/rest/user/authenticate
或使用cygwin:
curl -H "Content-Type: application/json" -d '{"test": "this"}' localhost:3000/rest/user/authenticate
我的2美分