2016-10-07 10 views
1

私はウェブアプリケーションにセイルjsを使用しています。私はbeforeCreateのデフォルトの動作を変更する必要があります。コードの最初の外観は:私は私のカスタム応答でそれをリダイレクトする一方で、次のメソッドが自動的にエラーコード500でSERVERERRORにリダイレクトされ、エラーがある場合セイルjs before()コールバック

beforeCreate: function(values, next) { 

    //ParamsCheck is my service and 'check' is method which will validate the 
    //parameters and if any invalid parameter then error will be thrown, otherwise 
    //no error will be thrown 

    ParamsCheck.check(values) 
    .then(() => { 
    // All Params are valid and no error 
    next(); 
    }) 
    .catch((err) => { 
    //Some errors in params, and error is thrown 
    next(err); 
    }); 
} 

ので、問題がある(例: badRequest、エラーコード400)。これを達成する方法は?

+0

あなたはこのエラーを取得した後に応答を送信する方法、あなたは最終的にコールバックが呼び出されるコードを表示することができますか? – abdulbarik

+0

実際には、帆で、beforeCreateメソッドのnext()コールバックにパラメータが渡された場合はエラーになり、500エラーが発生します。 'next()'が最後のコールバックです。私はデフォルトの応答を変更したい。 –

+0

あなたがエラーをコールバックするたびに、それはあなたに500のstatusCodeを与えます。悪い要求のために、statusCode:400あなたはクライアントに応答しているときに渡す必要があります – abdulbarik

答えて

1

beforeCreateで何らかのバリデーションを行っています。しかし、これは検証のための正しい場所ではありません。

より良いアプローチは、http://sailsjs.org/documentation/concepts/models-and-orm/validations#?custom-validation-rulesに記載されているカスタム検証ルールを使用するか、検証を処理するポリシーを作成することです。

私は、ポリシーを使用したい:

module.exports = function(req, res, next) { 
    var values = req.body; 
    ParamsCheck.check(values).then(() => { 
    return next(); 
    }).catch((err) => { 
    return res.send(422); // entity could not be processed 
    }); 
}; 
関連する問題