2011-09-20 9 views
13

有効なJSONでPOSTリクエストを作成すると、bodyParserはPOSTリクエストの本体を正しく解析します。しかし、私は体として無効なJSON文字列を送信する場合、私はエラーが表示されます。Expressで不正なJSON POSTデータを取得していますか?

SyntaxError: Unexpected token ILLEGAL 
at parse (native) 
at IncomingMessage.<anonymous>(/home/.../middleware/bodyParser.js:69:15) 
... 

だから、身体のパーサが体の解析中に障害が発生していることが表示されます。しかし、私はこの失敗をキャッチしてエラーを返したいと思います。私はそれをキャッチするために何ができるか分からないので、どんな助けも高く評価されます。ありがとう。

答えて

2

これはconnect.js bodyParser middlewareです。それはtry/catchを行い、次にnext(err)を呼び出します。このエラーをキャッチして、app.error()コールバックフックを使用してカスタムカスタムコードを処理することができます。 http://expressjs.com/guide.html#error-handling

+0

としてハンドラをエラーに相対位置を重要ではありません、エラーを管理するために、次のコードを適合させることができますちょっとピーター、返事をありがとう。残念ながら、私はそれを無駄にしようとしました。あたかもapp.errorが実行されていないかのようです。私は試しました: 'app.error(function(err、req、res、next){console.log(" ERR ");});'、しかし実行されていません。開発用の私のapp.configureでは、 'app.use(express.errorHandler({dumpExceptions:true、showStack:true}));'に設定しています。私はノード0.4.9を実行していて、1.7.1に接続し、2.4.6を表現しています。何か案は?再度、感謝します。 – naivedeveloper

+0

今すぐexpressのerrorHandlerをコメントアウトし、app.useルートが設定された後にapp.errorを呼び出すだけです。しかしそれ以外に、 'app.error'がなぜ呼び出されないのか分かりません。 –

+0

何らかの理由でexpress/connectを使用すると、JSON.parseが例外をスローしないため、エラーハンドラが起動しません。私はこれを回避する方法を調べています。 – timoxley

1

何らかの理由でexpress/connectを使用すると、JSON.parseが例外をスローしないため、エラーハンドラが起動しません。

私は何が起こっているのかを調べるためにlogged an issue with expressをしましたが、その間に、あなたはこの回避策を使用することができます。

express.bodyParser.parse['application/json'] = function(data) { 
    var result = JSON.parse(data) 
    if (typeof result != 'object') { 
    throw new Error('Problems parsing JSON') 
    } 
    return result; 
} 
app.use(express.bodyParser()); 

更新:この問題は明示の作者に慣れていないので、場合、私は疑問に思ってそれはそれを引き起こす別のライブラリです。この動作が導入されている場所を把握するために、コードを1つずつ解体する必要があります。

+0

私はこの問題が急行に関連していないことがわかります。奇妙な。あなたのケースでトラブルコードを分離することができましたか? – naivedeveloper

+0

まだ分​​かりません – timoxley

1

はあなた

app.use(express.bodyParserを())に置くようにしてください。 以降 app.use(express.errorHandler(...))

私のために解決しました。

またbodyParserがapp.use(app.router)を超えていなければならない

express.bodyParser.parse['application/json'] = function(req, options, fn){ 
    var buf = ''; 
    req.setEncoding('utf8'); 
    req.on('data', function(chunk){ buf += chunk }); 
    req.on('end', function(){ 
    try { 
    req.body = buf.length 
     ? JSON.parse(buf) 
     : {}; 
    fn(); 
    } catch (err){ 
    fn(new Error('Problems parsing JSON')); 
    } 
}); 
}; 
関連する問題