如何捕捉这个错误 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错误[重复]

如何使用 nodejs / express 上传和读取文件

nodejs+express+ejs生成项目

nodejs/express express.createserver 不是函数

NodeJS + Express + Mongo Session 存储