Expressプロジェクトファイルディレクトリの説明と詳細な機能の説明

Expressプロジェクトファイルディレクトリの説明と詳細な機能の説明

app.js: スタートアップファイル、またはエントリファイル

package.json: プロジェクト情報とモジュールの依存関係を保存します。依存関係に依存モジュールを追加して npm install を実行すると、npm は現在のディレクトリの package.json をチェックし、指定されたすべてのモジュールを自動的にインストールします。

node_modules: package.json にインストールされたモジュールを保存します。依存モジュールを package.json に追加してインストールすると、このフォルダーに保存されます。

パブリック: 画像、CSS、JS、その他のファイルを保存します

ルート: ルーティングファイルを保存する

ビュー: ビューファイルまたはテンプレートファイルを保存する

bin: 実行可能ファイルを保存する

app.js を開いて、中身を見てみましょう。

var express = require('express');
var パス = require('パス');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
bodyParser を require('body-parser');

var ルート = require('./routes/index');
var users = require('./routes/users');

var app = express();

//エンジン設定を表示
app.set('views', path.join(__dirname, 'views'));
app.set('ビューエンジン', 'ejs');

// ファビコンを /public に配置した後はコメントを解除します
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(ロガー('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', ルート);
app.use('/users', ユーザー);

// 404 をキャッチしてエラー ハンドラに転送します
app.use(function(req, res, next) {
    var err = new Error('見つかりません');
    エラーステータス = 404;
    次へ(エラー);
});

// エラーハンドラ

// 開発エラーハンドラ
// スタックトレースを出力します
app.get('env') === 'development' の場合 {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('エラー', {
            メッセージ: err.message、
            エラー: エラー
        });
    });
}

// プロダクション エラー ハンドラー
// スタックトレースはユーザーには漏洩しない
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('エラー', {
        メッセージ: err.message、
        エラー: {}
    });
});


モジュールをエクスポートします。

ここでは、require() を使用して、express や path などのモジュールと、routes フォルダー内の index.js および users.js ルーティング ファイルをロードします。 コードの各行の意味を説明しましょう。

(1) var app = express(): expressインスタンスアプリを生成します。

(2)app.set('views', path.join(__dirname, 'views')): ビューファイルが格納されているディレクトリ、つまりテンプレートファイルが格納されているディレクトリをviewsフォルダに設定します。__dirnameは、現在実行中のスクリプトが配置されているディレクトリを格納するグローバル変数です。

(3)app.set('view engine', 'ejs'): ビューテンプレートエンジンをejsに設定します。

(4)app.use(favicon(__dirname + '/public/favicon.ico')): /public/favicon.icoをファビコンアイコンとして設定します。

(5)app.use(logger('dev')): ロギングミドルウェアをロードします。

(6)app.use(bodyParser.json()): JSONを解析するためのミドルウェアを読み込みます。

(7)app.use(bodyParser.urlencoded({extended: false })): urlエンコードされたリクエストボディを解析するミドルウェアを読み込みます。

(8)app.use(cookieParser()): クッキーを解析するためのミドルウェアを読み込みます。

(9)app.use(express.static(path.join(__dirname, 'public'))): 静的ファイルが保存されるディレクトリをpublicフォルダに設定します。

(10) app.use('/',routes); および app.use('/users', users): ルートコントローラ。

(11)

app.use(function(req, res, next) {
    var err = new Error('見つかりません');
    エラーステータス = 404;
    次へ(エラー);
});

404 エラーをキャプチャし、エラー ハンドラーに転送します。

(12)

app.get('env') === 'development' の場合 {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('エラー', {
            メッセージ: err.message、
            エラー: エラー
        });
    });
}

開発環境のエラー ハンドラーは、エラー メッセージをエラー テンプレートにレンダリングし、ブラウザーに表示します。

(13)

app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('エラー', {
        メッセージ: err.message、
        エラー: {}
    });
});

運用環境のエラー ハンドラーは、ユーザーにエラー情報を漏らしません。

(14)module.exports = app:他のモジュールが呼び出すためのアプリインスタンスをエクスポートします。

bin/www ファイルをもう一度見てみましょう:

#!/usr/bin/env ノード
var debug = require('debug')('blog');
var app = require('../app');

app.set('ポート', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express サーバーはポート ' + server.address().port でリッスンしています);
});

(1)#!/usr/bin/env node: ノード実行ファイルであることを示します。

(2)var debug = require('debug')('blog'): デバッグモジュールをインポートし、デバッグログを出力します。

(3)var app = require('../app'): 上記でエクスポートしたアプリインスタンスをインポートします。

(4)app.set('port', process.env.PORT || 3000): ポート番号を設定します。

(5)

var server = app.listen(app.get('port'), function() {
  debug('Express サーバーはポート ' + server.address().port でリッスンしています);
});

プロジェクトを開始し、ポート 3000 をリッスンします。成功すると、Express サーバーがポート 3000 でリッスンしていることが出力されます。

もう一度、routes/index.js ファイルを見てみましょう。

var express = require('express');
var ルーター = express.Router();

/* ホームページを取得します。 */
router.get('/', 関数(req, res) {
  res.render('index', { title: 'Express' });
});

モジュール.exports = ルーター;

ホームページにアクセスするための GET リクエストをキャプチャするためのルーティング インスタンスを生成し、このルートをエクスポートして、app.use('/',routes); を通じて app.js に読み込みます。このように、ホームページにアクセスすると、 res.render('index', { title: 'Express' }); が呼び出され、 views/index.ejs テンプレートがレンダリングされ、ブラウザーに表示されます。

views/index.ejs ファイルを見てみましょう。

<!DOCTYPE html>
<html>
  <ヘッド>
    <タイトル><%= タイトル %></タイトル>
    <link rel='スタイルシート' href='/stylesheets/style.css' />
  </head>
  <本文>
    <h1><%= タイトル %></h1>
    <p><%= title % へようこそ</p>
  </本文>
</html>

テンプレートをレンダリングするときに、値が express 文字列である変数 title を渡しました。テンプレート エンジンはすべての <%= title %> を express に置き換え、上の図に示すように、レンダリングされた HTML をブラウザーに表示します。

このセクションでは、プロジェクトを作成して起動する方法を学び、プロジェクトの全体的な構造と操作プロセスを理解しました。次のセクションでは、エクスプレスとルート制御の基本的な使い方を学習します。

要約する

Expressプロジェクトファイルディレクトリの説明と機能の説明に関するこの記事はこれで終わりです。Expressプロジェクトファイルディレクトリの関連コンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • nodejs express がプロジェクトフレームワークを自動的に生成する方法の詳細な説明
  • エクスプレスプロジェクトの階層化の実践の詳細説明

<<:  ホストがアクセスできるようにMySQLの権限を変更する方法

>>:  Linux アカウントのパスワードを変更する詳細な例

推薦する

JSは写真の自動再生効果を実現します

この記事では、写真の自動再生効果を実現するためのJSの具体的なコードを参考までに紹介します。具体的な...

CentOs でノード バージョンを手動でアップグレードする方法

1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...

タイプライター効果を実現する純粋な js

この記事の例では、タイプライター効果を実現するためのjsの具体的なコードを参考までに共有しています。...

MySQL データベース アーキテクチャの詳細

目次1. MySQL アーキテクチャ2. ネットワーク接続層3. データベースサービス層4. 接続プ...

Node.js における path.join() の利点の分析

文字列連結ではなく path.join() メソッドを使用する必要があるのはなぜか疑問に思うかもしれ...

手書きの Vue2.0 データハイジャックの例

目次1: webpackをビルドする2. データハイジャック3: まとめ1: webpackをビルド...

マウスをホバーすると画像が折りたたまれる効果を実現する CSS

マウスをホバーすると画像が折りたたまれる効果を実現する CSS 1. 実施のポイント折り畳みは複数の...

MySQL で URL タイムゾーンの罠を回避する方法

序文最近、MySQL 6.0.x 以降の jar を使用する場合、コード URL リンクで serv...

MySQLトランザクションとSpring分離レベルの実装原理の詳細な説明

1. トランザクションはACID特性を持つ原子性: トランザクションは、トランザクションによって分割...

HTML Webページ作成チュートリアル iframeタグを慎重に使用してください

iframe を使用すると、他の Web サイトのページを簡単に呼び出すことができますが、注意して使...

WeChatアプレットは日付と時刻に基づいた並べ替え機能を実装

最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...

Vue プロジェクトで mock.js を使用するための完全な手順

Vue プロジェクトで mock.js を使用する開発ツールの選択: Vscode 1. コマンドラ...

MySQL は重複データを削除して最小の ID ソリューションを維持します

オンラインで検索して重複データを削除し、ID が最小のデータだけを残します。方法は次のとおりです。 ...

MySQL ページングクエリ最適化テクニック

ページング クエリを使用するアプリケーションでは、LIMIT と OFFSET を含むクエリが非常に...

MySQL 5.7.17 winx64 のインストールと設定のグラフィックチュートリアル

MySQL のインストールに関する以前のメモを要約して、皆さんと共有しました。ステップ 1: mys...