2016-03-19 40 views
1

私は自分の例外を作成しようとしています。 したがって、nodejsサーバーが実行されている環境に基づいてエラーをフォーマットできます。エラーがスローされると、これは未定義です。カスタム例外。これは定義されていません

(function() { 
    'use strict'; 
    var states = require('../states'); 
    var env = states.config.env; 
    var _ = require('underscore'); 

    /** 
    * This is a error that is going to be thrown on server errors. 
    * The application format the message for the specific environment 
    * @param error The error 
    */ 
    var unrecoverableError = function (error) { 
    this.name = 'unrecoverableError'; 
    this.message = _.isEqual(env, 'production') ? 'There was a server error. Please contact server admin' : error.toString(); 
    this.code = 500; 
    }; 

    unrecoverableError.prototype = Object.create(Error.prototype); 
    unrecoverableError.prototype.constructor = unrecoverableError; 

    module.exports = unrecoverableError; 
}()); 

私もORMとして続ける。

organisation.findOne({ 
     where: { 
      name: organisationName 
     } 
     }) 
     .then(function (organisation) { 
      if (_.isEmpty(organisation)) { 
      throw new modelNotFoundException(); 
      } else { 
      resolve(organisation); 
      } 
     }) 
     .catch(function (error) { 
      if (error instanceof modelNotFoundException) { 
      reject(error); 
      } else { 
      throw new unrecoverableError(error); 
      } 
     }) 
     .catch(function (error) { 
      reject(error); 
     }); 

次に、私のコンソールにエラーが表示されます。

私は私が間違って何をしたかを把握することはできません[TypeError例外は、未定義のプロパティ「name」を設定できません]。それはブラウザで動作しています。 ここで動作するバイブルの例です。事前にhttps://jsfiddle.net/y3gk0hos/

おかげで

答えて

1

誤差があるため、地球環境の「違法」アクセスを防止"use strict";文の存在が原因で発生します。

unrecoverableErrorというキーワードがnewキーワードなしで呼び出された場合、thisオブジェクトはグローバル環境を指します。ブラウザで許可されている間は、'use strict';ステートメントはこれを許可しません。その唯一の重要なショーに理由を知る

var unrecoverableError = function (error) { 
    // check if called with 'new' 
    if (this instanceof unrecoverableError) { 
    this.name = 'unrecoverableError'; 
    this.message = 'There was a server error. Please contact server admin'; 
    this.code = 500; 
    } 
    else { 
    // method was not called with 'new' 
    return new unrecoverableError(error); 
    } 
}; 
+1

私は新しい権利でそれを呼んでいますか?それともあなたが間違っているか分かっています。 "新しいunrecoverableError(エラー)をスローする;" –

+0

解決策は動作しますが、これが正しい解決策であるかどうかわかりません。 –

1

私はいけない:

あなたは newキーワードを指定せずに、それが実行されたかどうかを確認し、適切な使用を強制する必要があります、 unrecoverableErrorメソッドは、オブジェクトをインスタンス化することを確認するために、エラーメッセージは production環境です。

ノードにカスタムエラーを作成するためのコードは次のとおりです。https://gist.github.com/justmoon/15511f92e5216fa2624bリファクタリングでその形式に一致するようにします。

しかし、それはその価値より多くの仕事かもしれないようです。あなたはおそらくこのような何かをすることができます:throw new Error('Unrecoverable: ' + e.message)

+0

私はカスタムエラーを使用して応答を表示するためです。だからmodelNotFoundExceptionは404を与えます。そして私は400を与えるinvalidParamsExceptionを取得しました。そしてすべてのエラーはunrecoverableErrorになります。メッセージはユーザーに応答されます。だから、私はシステムエラーをユーザに表示したくありません。そのシステムエラーのようなので、ユーザーのために役に立たないの –

+0

あなたがカスタムエラーを使用したいが、私はプロダクト/ vsのdevのチェックについて話していた場合、それはちょうどコンソールにメッセージを表示することができますdev/testと同様にprod。しかし、それは副問題です。 –

+0

リンクされた要点のように見えるようにコードを変更できますか? –

関連する問題