FAQ

アプリケーションの構造はどうすればよいですか?

この質問に対する決定的な答えはありません。答えは、アプリケーションの規模と関係するチームによって異なります。可能な限り柔軟性を高めるために、Expressは構造に関して前提を設けません。

ルートやその他のアプリケーション固有のロジックは、必要な数のファイルに、任意のディレクトリ構造で配置できます。以下の例を参考にしてください。

また、Expressのサードパーティ製拡張機能もあり、これらのパターンの一部を簡素化します。

モデルはどのように定義すればよいですか?

Expressはデータベースの概念を持ちません。この概念はサードパーティのNodeモジュールに任されており、ほぼすべてのデータベースと連携できます。

モデルを中心としたExpressベースのフレームワークについては、LoopBackを参照してください。

ユーザーを認証するにはどうすればよいですか?

認証は、Expressが踏み込まないもう1つの意見の分かれる領域です。任意の認証スキームを使用できます。単純なユーザー名/パスワードスキームについては、この例を参照してください。

Expressはどのテンプレートエンジンをサポートしていますか?

Expressは、(path, locals, callback)シグネチャに準拠するすべてのテンプレートエンジンをサポートしています。テンプレートエンジンのインターフェースとキャッシュを正規化するには、consolidate.jsプロジェクトのサポートを参照してください。リストにないテンプレートエンジンでも、Expressシグネチャをサポートしている場合があります。

詳細については、Expressでのテンプレートエンジンの使用を参照してください。(日本語版へのリンクに変更)

404レスポンスはどのように処理すればよいですか?

Expressでは、404レスポンスはエラーの結果ではないため、エラーハンドラーミドルウェアはそれらをキャプチャしません。この動作は、404レスポンスが追加の作業がないことを示しているためです。つまり、Expressはすべてのミドルウェア関数とルートを実行し、それらのいずれも応答しなかったことを確認しました。404レスポンスを処理するには、スタックの一番下(他のすべての関数の

app.use((req, res, next) => {
  res.status(404).send("Sorry can't find that!")
})

実行時にexpress.Router()のインスタンスにルートを動的に追加することで、ルートがミドルウェア関数によって置き換えられないようにします。

エラーハンドラーはどのように設定すればよいですか?

エラー処理ミドルウェアは、他のミドルウェアと同じ方法で定義しますが、3つではなく4つの引数を使用します。具体的には、(err, req, res, next)シグネチャを使用します。

app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})

詳細については、エラー処理を参照してください。(日本語版へのリンクに変更)

プレーンHTMLをレンダリングするにはどうすればよいですか?

しません! res.render()関数でHTMLを「レンダリング」する必要はありません。特定のファイルがある場合は、res.sendFile()関数を使用します。ディレクトリから多くのアセットを提供する場合は、express.static()ミドルウェア関数を使用します。

前:その他の例