2013-04-22 9 views
5

私はaというコールバックを受け付ける関数を持っています。コールバックはエラーがある場合に呼び出されます。Expressリクエストで返されるエラーメッセージを作成する正しい方法は何ですか?

aは、Expressルート要求で呼び出されます。エラーがある場合、エラーは要求の応答でなければなりません。

function a(cb) { 
    cb(new Error('Some error message')) 
} 

app.get('/', function (req, res) { 
    a(function (error) { 
    if (error) { 
     res.json(error, 400) 
    } 
    res.send('No error') 
    }) 
}) 

私はExpress用のコードに見てきた、そしてres.jsonが私errorを文字列化することが表示されます。しかし、この結果は、空の文字列です:

> var e = new Error('Some error message') 
undefined 
> JSON.stringify(e) 
'{}' 
> e.message 
'Some error message' 

、このような私のルートにエラーオブジェクトtoStringを変換として、私は私のルートはここでエラーメッセージを返すように得ることができる方法があります。しかし、Node APIでエラーメッセージをフォーマットするのがベストプラクティスであることと、それがここで変更されるかどうかを知りたいと思います。私は違った私のエラーメッセージをフォーマットする必要があり、または私はちょうどルートにErrorオブジェクトを処理する必要があり、のような:

res.json({ error: error.message }, 400) 
+0

なぜe.messageが欠落しているかの詳細:http://stackoverflow.com/questions/18391212/is-it-not-possible-to-stringify-an-error-using-json-stringify – Smartkid

答えて

0

Expressルートだけnext()を呼び出すことによって、現在のルートをスキップするか、またはnext(err)を呼び出すことにより、エラーを渡すために使用することができる第三の引数nextを使用することができます。

は使用してみてください:

app.get('/', function (req, res, next) { 
    a(function (error) { 
    if (error) { 
     next(error); 
    } 
    else { 
     res.send('No error') 
    } 
    }); 
}); 

詳細については、@ steveukxの答えに追加するにはhttp://expressjs.com/api.html#app.param

1

エラーが発生しなかったとき、私は今、何をあなたの応答は、見えないが、これはどのようにあります私は通常、JSONレスポンスを扱います:

function (err, data) { 
    if (err) { 
     res.json({ 
      success: false, 
      error: err.message 
     }, 400); 
    } 
    else { 
     res.json({ 
      success: true, 
      data: data 
     }); 
    } 
} 

余分なミドルウェア/機能でこれをラップしようとします。関数のシグネチャを標準ノードスタイルと同様に保ちます。 (最初のパラメータエラー、実際のデータにパラメータを追います)。クライアントが応答を処理するのは簡単です。successフィールドを調べるだけです。

+0

これは有望ですね、ありがとうございます。これを受け入れる前にちょっと待って答えようと思います。 –

5

をチェックアウト、あなたは、Expressでエラーハンドラを指定することができます.useによって4のアリティと機能をINGの。

app.use(function(err, req, res, next){ 
    res.json(500, { 
    error: err.message 
    }); 
}); 

next(err)を実行するたびに呼び出されます。 the docsを参照してください。

関連する問題