Node.js express.json middleware pas d'analyse de la demande comme prévu
J'ai une simple boucle (je pense que c'est à droite) qui publie un petit objet JSON pour exprimer mon serveur:
curl -d "{'test': 'this'}" localhost:3000/rest/user/authenticate
J'ai exprès mis en place comme:
//set up body parsing in express to be able to get parse JSON posts
server.use(express.json());
server.use(express.urlencoded());
et ont le gestionnaire accepte la route:
JSON = require('JSON')
module.exports = {
authenticateUser: function create(req, res){
var postedObject = req.body
console.log(postedObject)
res.send('Handle Post: authenticateUser');
}
}
le gestionnaire est appelé, mais c'est l'enregistrement de l'JSON corps de façon inattendue:
{ '{\'test\': \'this\'}': '' }
Donc, mon ensemble de l'objet semble être le nom côté d'un JSON Nom:Valeur de l'objet. peu importe ce que je poste, il semble être en ajoutant de la valeur à côté. Sauf si je fais quelque chose comme ceci:
curl -d "a=a" localhost:3000/rest/user/authenticate
qui enregistre le:
{'a':'a'}
donc je ne l'ai pas mis dans le droit des en-têtes? Configuré express de mal? J'ai l'intention de creuser par le biais de l'express code, mais il se demande si quelqu'un pourrait savoir avant de trouver la solution. De toute façon avoir une base de/indexés réponse à cette sur le web sera agréable.
mise à jour de 1
ok j'ai besoin d'ajouter l'en-tête de la boucle
curl -H "Content-Type: application/json" -d "{'test': 'this'}" localhost:3000/rest/user/authenticate
qui donne l'erreur:
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)
OU
curl-H "Content-Type: application/json" -d "{test: 'cette'}" localhost:3000/repos/utilisateur/authentifier
qui donne l'erreur:
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)
mise à jour 2
dans le fichier connect/lib/middleware/json.js
cette ligne semble être la seule à l'origine de problèmes
req.body = JSON.parse(buf, options.reviver);
mise à jour 3
Je pense vraiment que c'est mon cURL
buf= JSON.stringify({test: 'This'});
console.log(buf)
req.body = JSON.parse(buf, options.reviver);
œuvres de la connexion la première
{"test":"cette"}
et puis dans mon gestionnaire de:
----------------------
{ test: 'this' }
----------------------
OriginalL'auteur akaphenom | 2014-02-09
Vous devez vous connecter pour publier un commentaire.
1) JSON middleware ne fonctionne que si la demande a
Content-Type: application/json
en-tête.2) JSON Valide doit contenir
"
, pas'
.Il devrait donc être
'{"test": "this"}'
au lieu de"{'test': 'this'}"
Essayer cette commande:
OriginalL'auteur Oleg
La réponse a deux morceaux
sur windows passer par la douleur de passer le json correctement, cURL sur ma machine windows n'a pas affaire à échanger les guillemets simples et doubles , donc la bonne cURL est
curl-H "Content-Type: application/json" -d "{"""test""": """ce"""}," localhost:3000/repos/utilisateur/authentifier
Yup, à l'intérieur du paramètre de données, vous devez utiliser trois guillemets pour envoyer une apostrophe double pour le serveur.
Accepter zub la réponse, parce qu'il est correct. J'ai essayé un tas de choses pour obtenir autour de windows ici.
OriginalL'auteur akaphenom
Pour ceux qui utilisent facteur comme moi juste essayer d'envoyer la demande en tant que POST>>CRU et de créer votre Json pour faire de la poste, dans mon test, j'ai créé un simple json comme ça et travaux:
{
"nom": "test"
}
En utilisant le formulaire de données ou x-www-form-urlencoded il ne fonctionne pas.
OriginalL'auteur Slaters
Sous Windows cmd:
ou de l'utilisation de cygwin:
Mes 2 cents
OriginalL'auteur Yuanpeng.Zheng