2017-02-25 8 views
0

サポートされていないURLを処理するオプションをWebサービスに追加したいと思います。 が悪いのURL、(コード404)を処理するために、私はNodejsはサポートされていないURLと要求の種類を処理します

app.use(app.router); 

を使用してみましたしかし、どうやらそれは非推奨ですが、私は他のどのようなソリューションを使用することができますか? 私はこれを見ましたsuggested solutionしかし、私は他の選択肢について最初に聞きたいと思います。

また、私のWebサービスでは、GETやPOSTなどのいくつかのHTTPリクエストタイプがサポートされていますが、サポートしていないリクエストタイプに正しく対応するにはどうすればよいですか? DELETEなどの

私が望む動作は、404エラーの場合、すべて適切な応答メッセージを返します。サポートされていないリクエストの場合も同じです。例えば

:Expressのすべての未処理の要求のための

response.status(404).json({success: false,msg: 'Invalid URL'}); 
+0

サポートされていないメソッドの場合と同様に、404のケースで何をしたいのかを具体的に説明する必要があります(最後のケースでは、URLの汎用性がある場合や、別の動作異なるURLの場合)。 – jcaron

+0

@jcaron、私は両方のための2つの動作をしたいと思います。 404の場合、私はすべての応答メッセージを返します。サポートされていないリクエストの場合も同じです。 –

答えて

1

404ハンドラは、一般的に次のようになります。

app.use(function(req, res, next) { 
    res.status(404).sendFile(localPathToYour404Page); 
}); 

あなたはこれだけあなたが登録し、最後のルート作り、それを取得します他のルートが要求を処理していない場合に呼び出されます。

これは、DELETEなどサポートしていないメソッドも検出します。リクエストされたものに基づいてレスポンスをカスタマイズしたい場合は、上記のハンドラの中に必要な検出コードとカスタマイズコードを置くことができます。

app.use(function(req, res, next) { 
    let obj = {success: false}; 
    if (req.method === "DELETE") { 
     obj.msg = "DELETE method not supported"; 
    } else { 
     obj.msg = "Invalid URL"; 
    } 
    res.status(404).json(obj); 
}); 

いくつかの参照:

あなたの応答がJSONであれば、

app.use(function(req, res, next) { 
    if (req.method === "DELETE") { 
     res.status(404).sendFile(localPathToYour404DeletePage); 
    } else { 
     res.status(404).sendFile(localPathToYour404Page); 
    } 
}); 

をまたは:あなたはDELETE要求を検出したい場合

たとえば、あなたがこれを行うことができますExpress FAQ: How do I handle 404 responses?

Express Custom Error Pages


そして、あなたはそれでいる間、あなたはおそらくあまりにもExpress error handlerに置く必要があります。

// not that this has four arguments compared to regular middleware that 
// has three arguments 
app.use(function (err, req, res, next) { 
    console.error(err.stack) 
    res.status(500).send('Something broke!') 
}); 

これはあなたのミドルウェアのいずれかでエラーが発生し、next(err)と呼ばれるケースを処理することができます。

+0

詳細な応答をありがとう、私は質問デュオを持って、何が 'obj'を意味するのですか?どんなタイプのオブジェクトが作成されますか? –

+0

'let'は' var'のためのES6アップグレードです。ブロックスコープ変数を宣言します。 'var'は関数スコープの変数を宣言します。 let [here MDN](https://developer.mozilla)について読むことができます。org/ja-jp/docs/Web/JavaScript/Reference/Statements/let)を参照してください。 'var obj = {};'と同じ種類のオブジェクトを作成します。多くの人々は 'var'はもはや使わなくてはならないと考えています。つまり、ES6がサポートしている環境(node.jsなど)の宣言は' let'を使うべきです。私の個人的なnode.jsコーディングでは、もはや 'var'を使用しません。 – jfriend00

+0

オハイオ州オハイオ州オハイオ州、私は 'var express = require(' express '); 'let express = require(' express ');' ?それは重大な問題ではありませんか? –

関連する問題