Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
195
rated 0 times [  197] [ 2]  / answers: 1 / hits: 26614  / 11 Years ago, sun, february 9, 2014, 12:00:00

I have a simple cURL (i think this is right) that posts a small JSON object to my express server:



curl -d {'test': 'this'} localhost:3000/rest/user/authenticate


I have express set up as:



// set up body parsing in express  to be able  to get parse JSON posts
server.use(express.json());
server.use(express.urlencoded());


and have handler that accepts the route:



JSON = require('JSON')
module.exports = {
authenticateUser: function create(req, res){
var postedObject = req.body
console.log(postedObject)
res.send('Handle Post: authenticateUser');
}
}


the handler is getting called, but it is logging the JSON body unexpectedly:



{ '{'test': 'this'}': '' }


So my entire object looks to be the name side of a JSON Name:Value pair object. no matter what I post it seems to be appending the value side. Unless I do something like this:



curl -d a=a localhost:3000/rest/user/authenticate


which logs:



{'a':'a'}


so have i not set the right headers? Configured express wrong? I plan on digging through the express code, but wondered if somebody might know before I find the solution. Either way having a searchable/indexed answer to this on the web will be nice.



update 1



ok I need to add the header to the cURL



curl -H Content-Type: application/json -d {'test': 'this'} localhost:3000/rest/user/authenticate


which gives the error:



Parsing: {'test': 'this'}
SyntaxError: Unexpected token '
at Object.parse (native)
at C:blahnode_modulesexpressnode_modulesconnectlibmiddlewarejson.js:86:19
at IncomingMessage.onEnd (C:blahnode_modulesexpressnode_modulesconnectnode_modulesraw-bodyindex.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



which gives the error:



Parsing: {test: 'this'}
SyntaxError: Unexpected token t
at Object.parse (native)
at C:blahnode_modulesexpressnode_modulesconnectlibmiddlewarejson.js:86:19
at IncomingMessage.onEnd (C:blahnode_modulesexpressnode_modulesconnectnode_modulesraw-bodyindex.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)


update 2



in the file connect/lib/middleware/json.js



this line seems to be the one causing issues



req.body = JSON.parse(buf, options.reviver);


update 3



I really think it is my cURL



buf= JSON.stringify({test: 'This'});
console.log(buf)
req.body = JSON.parse(buf, options.reviver);


works logging first
{test:this}



and then in my handler:



----------------------
{ test: 'this' }
----------------------

More From » json

 Answers
12

1) JSON middleware only works if the request has Content-Type: application/json header.

2) Valid JSON should contain , not '.

So it should be '{test: this}' instead of {'test': 'this'}



Try this command:



curl -d '{test: this}' -H Content-Type: application/json localhost:3000/rest/user/authenticate

[#72635] Friday, February 7, 2014, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
lucianod

Total Points: 667
Total Questions: 106
Total Answers: 92

Location: Jordan
Member since Thu, Aug 5, 2021
3 Years ago
lucianod questions
;