2016-08-22 10 views
1

Node.js Expressを使用してHTTP REST APIを作成しています。 私は、次のよう約束を返し下線サービス呼び出す方法があります:Node.js Express、エラー処理はconsole.errorでのみ動作します

function getAllApps(request, response) { 
    appService.getAllApps(request.query.$expand).then(function (apps) { 
      response.status(200).send(apps); 
     }) 
} 

を、私は以下のような方法をマップ:

var api = express.app; 
api.get('/apps', getAllApps); 

を今、私はエラーとして取り扱いを導入しています以下:

function getAllApps(request, response) { 
    appService.getApps(request.query.$expand).then(function (apps) { 
     response.status(200).send(apps); 
     }) 
     .catch(function (err) { 
      console.error('Error occurred in Apps Api: ' + err); 
      response.status(400).send(err); 
    }); 
} 

期待通りに機能しているexcepエラーが発生したとき、私は次のようにコンソールで完全なエラー・スタックを得ることをトン:

Express is listening on 127.0.0.1:3000 
Web Api ready 

Error occurred in Apps Api: Error: Actions is not defined on the model. 

しかし、私のHTTPメソッドの戻り値400を、ボディが空である、それだけで中括弧が含まれています

{} 
+0

あなたは実際に投げますか、あるいは「アプリ」は空ですか? – Bergi

+0

'.stack'は、エラーafaikの列挙できないプロパティです。つまり、' send'によって無視されます。とにかく、それをユーザーに送信したくないのですか? – Bergi

+0

@Bergi done、apologize – Raffaeu

答えて

2

これは、エラーオブジェクトが列挙可能なプロパティを持っていないことが原因で発生されるので、JSON.stringify(new Error("my message")){}を返します。 。

.catch(function (err) { 
    console.error('Error occurred in Apps Api: ' + err); 
    response.status(500).send("" + err); 
}); 

PS:コンソール出力と同じを取得するには、あなたがそうのように、文字列にエラーオブジェクトをcoerectする必要がありますが、内部エラーのためにstatus(500)を使用する必要があります。

EDIT

この場合は、別のエラー処理メカニズムを必要としない場合、あなたはエラー処理するのに急行しましょうことができます:

function getAllApps(request, response, next) { 
    appService.getApps(request.query.$expand).then(function (apps) { 
    response.status(200).send(apps); 
    }) 
    .catch(function (err) { 
    next(err || new Error("Unknown error")); 
    }); 
} 

とをExpressのデフォルトのエラー処理は得られない場合あなたは満足のいく結果を得て、あなた自身のエラーハンドラを登録することができます:

... 

// note that the middleware having 4 parameters makes it an error handler 
app.use(function(err, req, res, next) { 
    console.error('Error occurred in Apps Api: ' + err); 
    response.status(500).send("" + err); 
}); 
+0

Perfect!できます – Raffaeu

-1

そうのような状態400を削除します。

function getAllApps(request, response) { 
    appService.getApps(request.query.$expand).then(function (apps) { 
    response.status(200).send(apps); 
    }) 
    .catch(function (err) { 
     console.error('Error occurred in Apps Api: ' + err); 
     response.json('Error occurred in Apps Api: ' + err); 
    }); 
} 
+1

あなたの解決策は200を返します。これはRESTで間違っています。これはエラーですので、400または500を返す必要があります – Raffaeu

関連する問題