如何捕捉这个错误 NodeJs/Express?
Posted
技术标签:
【中文标题】如何捕捉这个错误 NodeJs/Express?【英文标题】:How to catch this error NodeJs/Express? 【发布时间】:2014-07-04 17:07:54 【问题描述】:我正在尝试使用 NodeJs 编写简单的 Web 服务。我按如下方式进行 Ajax 调用:
$.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);
);
然后在服务器端我有这个代码:
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);
但是,由于我试图传递给服务器的 json 无效,我的 Express 崩溃了,对此我无能为力。我抓不住它或任何东西。我怎样才能发现这个错误?
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)
我怎样才能发现这个错误?我需要的是检测传递的json是否无效并返回400
和json消息 "someerror":"somemessage"
【问题讨论】:
您是否尝试添加 Express 错误处理程序?app.use(function(err, req, res, next) /* check err */ );
是的,它什么也没做:(
你在哪里添加了错误处理程序?我通常在中间件堆栈的末尾和路由之后添加一个。
【参考方案1】:
在 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);
【讨论】:
你先生是个天才!有趣的是(对于过去几个小时看我的人来说很有趣,对我来说不是那么多)我有类似的 app.use(fu... 调用但它从未被触发。它现在正在工作,我只是试图找出我做错了什么。谢谢!!! @spirytus 很乐意提供帮助 :)以上是关于如何捕捉这个错误 NodeJs/Express?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Bluebird 承诺 NodeJS Express
NodeJS Express和ReactJS的CORS错误[重复]