J’essaie d’écrire un service Web simple à l’aide de NodeJs. Je fais appel à Ajax comme ci-dessous:
$.ajax({ type: "POST", url: "http://localhost:3800", // this json below is invalid and I need to verify it on server side data: '"jhhjh":"ssss"}', contentType: "application/json; charset=utf-8", dataType: "json", success: function(data){ console.log(data); }, failure: function(errMsg) { console.log(errMsg); } });
Ensuite, côté serveur, j’ai ce code:
var express = require("express"), app = express(), bodyParser = require('body-parser'); app.use(bodyParser()); app.all('/', function(req, res, next) { // set origin policy etc so cross-domain access wont be an issue res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); // that is the line that gives me error message and cannot return anything back to client res.send("all good"); }); app.post('/', function(req, res) { }); app.listen(process.env.PORT || 3800);
Cependant, comme json que j’essaie de transmettre au serveur est invalide, Express se bloque et je ne peux rien faire à ce sujet. Je ne peux pas l’attraper ou quoi que ce soit. Comment puis-je attraper cette erreur?
Error: invalid json at parse (C:\xampp\htdocs\testing\node_modules\body-parser\index.js:60:15) at C:\xampp\htdocs\testing\node_modules\body-parser\index.js:156:18 at IncomingMessage.onEnd (C:\xampp\htdocs\testing\node_modules\body-parser\node_modules\raw-body\index.js:113: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)
Comment puis-je attraper cette erreur? Ce dont j’ai besoin, c’est de détecter si JSON transmis est invalide et de renvoyer 400
avec le message { "someerror":"somemessage"}
essayez ceci dans le server.js:
var express = require("express"), app = express(), bodyParser = require('body-parser'); app.use(bodyParser()); app.use(function(err,req,res,next){ if(err){ console.log(err); } next(); }); app.all('/', function(req, res, next) { // set origin policy etc so cross-domain access wont be an issue res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); console.log(req.body); next(); }); app.post('/', function(req, res) { if(!Object.keys(req.body)) res.json('all good'); else res.json({ success: false, error: "json invalid" }, 400); }); app.listen(process.env.PORT || 3800);