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 アカウントのパスワードを変更する詳細な例

推薦する

MySQL が「operate_time」エラーのデフォルト値が無効であると報告する問題を解決する

データベースでcreate tableステートメントを実行する テーブル `sys_acl` を作成...

Vueはファイルのアップロードとダウンロード機能を実装します

この記事では、ファイルのアップロードとダウンロード機能を実装するためのVueの具体的なコードを例とし...

初心者のためのMySQL外部キーの設定方法

目次外部キーの役割mysql 外部キー設定方法要約する外部キーの役割データの一貫性、整合性を維持し、...

JSを使用して簡単な計算機を実装する

JSを使用して、参考用の簡単な計算機を完成させます。具体的な内容は次のとおりです。要件: 入力値は数...

Docker で PostgreSQL を実行し、いくつかの接続ツールを推奨する

1 はじめに PostgreSQL は、非常に充実した機能を備えたフリーソフトウェアのオブジェクトリ...

Dockerカスタムネットワーク実装

目次1. コンテナ相互接続を実現するためにネットワークをカスタマイズする2. ネットワーク接続1. ...

jsドラッグ効果の原理と実装

ドラッグ機能は主に、ドラッグによる並べ替え、ポップアップ ボックスのドラッグと移動など、ユーザーがカ...

WeChatミニプログラムでトークンの有効期限を処理する方法

目次まず結論から質問解決Promiseを使用してコールバック関数をカプセル化する要約するまず結論から...

MySQL 独立インデックスと共同インデックスの選択

複数列のインデックスについては、理解が不足していることがよくあります。よくある間違いは、多数の列に独...

CSS で透明なグラデーション効果を実装するためのサンプルコード

Zhihu Discovery コラムのタイトル画像は、通常、以下のように表示されます。明らかに、グ...

CSS を使用して 3 列レイアウトを実装するサンプル コード。中央の列は適応型で、テキスト サイズに応じて幅が変わります。

Baiduのインタビューで遭遇する質問は、次のレイアウト効果を達成する必要がある。 中央の紫色の列...

Linux でのマルチスレッドプログラミング例の分析

1 はじめにスレッド技術は 1960 年代にすでに提案されていましたが、マルチスレッドがオペレーティ...

Linux 環境に MySQL 8.0 をインストールするプロセスの紹介

目次序文1. Linux は yum ソースを変更します (MYSQL のインストールが遅い場合は試...

CSS でよく使用されるフォントサイズ、フォント単位、行の高さの詳細な説明

px(ピクセル)ピクセルという言葉は皆さんもよくご存知だと思います。次に、この単位に関するちょっとし...

MySQLの高性能最適化スキルの概要

データベースコマンド仕様すべてのデータベース オブジェクト名には小文字を使用し、アンダースコアで区切...