2017-05-10 1 views
0

を可能にしました。しかし、私は知らないし、ドキュメントとサンプルを読んで、FINDを取得、挿入、削除などできないようにする方法を見つけられませんでした。フェザーREST APIで使用できる動詞を構成する方法はありますか?私はリターンを持っていますが、500エラーが返され、応答があること(サービスフックで)前のフックで拒否機能を追加しようとしました:羽は、私はfeathersjs(V2.0)での作業は非常に新しいですし、ただ唯一の羽を使用してレコードの一握りを見つける小さなRESTアプリケーションをした動詞の設定

{"name":"GeneralError","message":"Cannot read property 'bind' of undefined","code":500,"className":"general-error","data":{},"errors":{}}

デフォルト(のいずれかの機能なし他の動詞のためのフックファイル)は、次のとおりです。

理にかなっているが、私はそれらを許すと、この「誤解を招く」エラーを返す必要がなぜあなたはそれらの動詞を必要としない場合は、私の個人的な感情は、ある

"name":"NotFound","message":"No record found for id 'null'","code":404,"className":"not-found","errors":{}}

UPDATE:

私はトリックをしましたが、応答ヘッダーは、実際に何が起こったのかと一致していないので、私は満足していません。

は、ヘッダに情報をつかむために、私は here与えられた回答に基づいてサービスファイル

// This must be before the service creation 
app.use(function(req, res, next) { 
    req.feathers.headers = req.headers; 
    next(); 
}); 

app.use('/myservice', createService(options)); 

にこのコードを追加する必要がありました。しかし、関数がサービス作成パラメータにあるdafflの答えは、feathers-cliを使用して生成されたコードでは機能しないため、before(より良い方法である必要がありますか?)、createService関数で第2または第1パラメータとして設定する方法?またはoptionsオブジェクトの中で、それは可能ですか?私はちょうどコンパイルエラーを取得します)。私は「myservice.hooks.js」

module.exports = function() { 
    return function (hook) { 
    if(hook.method !== 'find' && hook.method !== 'error'){ 
     throw new Error('Method not allowed'); 
    }else{ 
     return hook; 
    } 
    }; 
}; 

もちろんこれは500エラーを与えるにそれをフック関数を使用して新しいファイルを定義して含める必要がありましたが、上の許可ヘッダーと405エラーでなければなりません「GET 'それは、より良い仕事を

hook.params.headers.allow = 'GET'; 
hook.params.headers.status = 405; 

が、上の(幸い、データベースのユーザーのみが選択権を持っている)、それが行くインスタンスの削除やデータベースのレコードを削除しよう、しかし:私はまた、代わりにエラーを投げ、このコードを使用してみましたPOSTとPUTでそれほど遠くには行かないでください。応答ヘッダーのステータスが200 OKではなく、400(?!!)で、allowヘッダーが変更されていないので、「GET、POST、PUT、PATCH、DELETE」です。

私はthis solutionを読みましたが、より適切なヘッダー応答を返すために、羽根のhook.params.headers(またはhook.header(s)が正しく定義されていない)を使用してヘッダーの値を正しく設定する方法がわかりません。もちろんそれ以上続かないでください。任意のアイデアですか?慈悲を受けてください、私は羽を持つ初心者です(1週間未満)と多分これは愚か/明らかな質問です。

ありがとうございます。あなたはerrors API documentationに概説されているようfeathers-errors使用する必要があり、正しいエラーコードをスローする

+0

としてExpressのエラー・ハンドルを設定することを忘れないでください。また

const errors = require('feathers-errors'); module.exports = function() { return function (hook) { if(hook.method !== 'find' && hook.method !== 'error'){ throw new errors.MethodNotAllowed('Method not allowed'); }else{ return hook; } }; }; 

または書き込み:あなたはMethodNotAllowedエラーを使用してにあなたのフックを変更することで405を投げることができます答えて、マークしてください。ありがとう!:) – Alfabravo

答えて

0

。受け入れられたような答えをマークしてくださいいずれかpointed out in the same chapter

+0

ありがとうダフ、申し訳ありませんが、私はあなたのExpressエラーの指示を取得していない。私は "module.exports = app;"の前にコードを書いています(app.js)の前と "app.hooks(appHooks);"の前に、私はアプリケーションを起動すると、このエラーが表示されます: "新しいTypeErrorを投げる( 'app.use()ミドルウェア関数');しかし、ミドルウェア/ index.jsファイルのスキャフォールドコードには、すでにExpressエラーハンドルが最後にあるため、すでにそこに存在していました。だから、基本的に私はこのコードをどこに置くべきかわからない: "app.use(errorHandler());" app.jsに対応する必要があります – George

+0

最後に私は別の行を誤って別のconst notFoundを再定義するフックに貼り付けました....私はまた、ミドルウェアには既にハンドラがあることに気がついたので、必要はありませんExpressエラーハンドラコードを設定します。 – George

関連する問題