この章では、nodejs:express の学習の概要と基礎知識を紹介します。 Express とは何ですか? Express は最小限の機能を備えた Web 開発フレームワークであり、ルーティングとミドルウェアで完全に構成されています。つまり、Express アプリケーションはさまざまなミドルウェアを呼び出します。困っている友人は参考にしていただければ幸いです。
初期化
新しいディレクトリmyappを作成し、プロジェクトを初期化します
$ npm init
express
$ npm install express --save
Hello Worldインスタンスを作成します
myappディレクトリに入り、app.jsという名前のファイルを作成します
リーリー上記のコードはサービスを開始し、ポート 3000 から受信するすべての接続リクエストをリッスンします。すべての (/) URL またはルートに「Hello World!」という文字列が返されます。他のすべてのパスは 404 Not Found を返します。
次のコマンドラインから
var express = require('express'); var app = express(); app.get('/', function(req, res) { res.send('Hello World!'); }); var server = app.listen(3000, function() { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); });
expressジェネレーターを起動します
アプリケーションジェネレーターツールexpressは、アプリケーションのスケルトンを素早く作成できます。
1. 次のコマンド
$ node app.js
をインストールします。 2. 現在のディレクトリに myapp アプリケーションを作成し、次のコマンドを実行します。
$ npm install express-generator -g
Express アプリケーション ジェネレーターを通じて作成されたアプリケーションは、通常、次のディレクトリ構造になります。
ルーティングは、URI (またはパス) と特定の HTTP メソッド (GET、POST など) で構成され、特定の Web サイト ノードへのクライアントのアクセスにアプリケーションがどのように応答するかが関係します。各ルートには 1 つ以上のプロセッサ関数を含めることができ、ルートが一致すると、これらの関数が実行されます。 ルーティングの定義は、app.METHOD(PATH, HANDLER) の構造で構成されます。このうち、app はエクスプレス インスタンス、METHOD は HTTP リクエスト メソッドの 1 つ、PATH はルートが一致したときに実行する必要がある関数です。
一般的なルーティング コードをいくつか示します:
$ express myapp $ cd myapp $ npm install> set DEBUG=myapp & npm start
文字列パターンを使用したルーティング パスの例: 文字 ?、+、*、および () は正規表現のサブセットであり、- と は次のように文字列ベースのパスで使用されます。解釈。
├── app.js ├── bin │ └── www ├── package.json ├── public │ ├── images │ ├── javascripts │ └── stylesheets │ └── style.css ├── routes │ ├── index.js │ └── users.js └── views ├── error.jade ├── index.jade └── layout.jade 7 directories, 9 files
ルートハンドル
は、ミドルウェアのように動作するリクエスト処理用の複数のコールバック関数を提供できます。唯一の違いは、これらのコールバック関数が next('route') メソッドを呼び出し、他のルート コールバック関数をスキップできることです。 ルート ハンドルにはさまざまな形式があり、以下に示すように、関数、関数配列、またはその 2 つの混合にすることができます:
var express = require('express'); var app = express(); // respond with "hello world" when a GET request is made to the homepage app.get('/', function(req, res) { res.send('hello world'); }); // POST method route app.post('/', function (req, res) { res.send('POST request to the homepage'); }); //app.all() 是一个特殊的路由方法,没有任何 HTTP 方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。 app.all('/secret', function (req, res, next) { console.log('Accessing the secret section ...'); next(); // pass control to the next handler });
応答メソッド
応答オブジェクト (res) のメソッド次の表では、クライアントが応答を返し、要求と応答のサイクルが終了します。ルート ハンドルでメソッドが呼び出されない場合、クライアントからのリクエストはハングします。 方法の説明:
res.download() は、ファイルのダウンロードを要求します。res.end()は応答処理プロセスを終了します。
res.JSON() は JSON 形式で応答を送信します。
res.jsonp() は、JSONP をサポートする JSON 形式で応答を送信します。
res.redirect() はリクエストをリダイレクトします。
res.render() はビュー テンプレートをレンダリングします。
res.send() はさまざまな種類の応答を送信します。
res.sendFile はファイルをオクテット ストリームとして送信します。
res.sendStatus() は応答ステータス コードを設定し、それを応答本文の一部として文字列として送信します。
app.route()
app.route() を使用して、ルーティング パスのチェーン ルート ハンドルを作成できます。パスは 1 か所で指定されるため、モジュール型ルーティングの作成に役立ち、コードの冗長性やタイプミスが減ります。 // 匹配 acd 和 abcd
app.get('/ab?cd', function(req, res) {
res.send('ab?cd');
});
// 匹配 abcd、abbcd、abbbcd等
app.get('/ab+cd', function(req, res) {
res.send('ab+cd');
});
// 匹配 abcd、abxcd、abRABDOMcd、ab123cd等
app.get('/ab*cd', function(req, res) {
res.send('ab*cd');
});
// 匹配 /abe 和 /abcde
app.get('/ab(cd)?e', function(req, res) {
res.send('ab(cd)?e');
});
//使用正则表达式的路由路径示例:
// 匹配任何路径中含有 a 的路径:
app.get(/a/, function(req, res) {
res.send('/a/');
});
// 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等
app.get(/.*fly$/, function(req, res) {
res.send('/.*fly$/');
});
express.Router
express.Router クラスを使用して、モジュール式のマウント可能なルート ハンドルを作成します。 Router インスタンスは完全なミドルウェアおよびルーティング システムであるため、「ミニアプリ」と呼ばれることがよくあります。 次の内容を含むbirds.jsという名前のファイルをアプリディレクトリに作成します:
//使用多个回调函数处理路由(记得指定 next 对象): app.get('/example/b', function (req, res, next) { console.log('response will be sent by the next function ...'); next(); }, function (req, res) { res.send('Hello from B!'); }); //使用回调函数数组处理路由: var cb0 = function (req, res, next) { console.log('CB0'); next(); } var cb1 = function (req, res, next) { console.log('CB1'); next(); } var cb2 = function (req, res) { res.send('Hello from C!'); } app.get('/example/c', [cb0, cb1, cb2]);
次に、アプリケーションにルーティングモジュールをロードします:
app.route('/book') .get(function(req, res) { res.send('Get a random book'); }) .post(function(req, res) { res.send('Add a book'); }) .put(function(req, res) { res.send('Update the book'); });
アプリケーションは/birdsおよび/birds/aboutからのリクエストを処理し、timeLogを呼び出すことができます。このルートに指定されたミドルウェア。
Express を使用して静的ファイルをホストします
Express の組み込みの Express.static を使用して、画像、CSS、JavaScript ファイルなどの静的ファイルを簡単にホストします。 静的リソース ファイルが配置されているディレクトリをパラメータとして Express.static ミドルウェアに渡し、静的リソース ファイルへのアクセスを提供します。たとえば、画像、CSS、JavaScript ファイルをパブリック ディレクトリに配置すると、次のことが可能になります。
var express = require('express'); var router = express.Router(); // 该路由使用的中间件 router.use( function timeLog(req, res, next) { console.log('Time: ', Date.now()); next(); }); // 定义网站主页的路由 router.get('/', function(req, res) { res.send('Birds home page'); }); // 定义 about 页面的路由 router.get('/about', function(req, res) { res.send('About birds'); }); module.exports = router;
これで、パブリック ディレクトリ内のファイルにアクセスできるようになります。
var birds = require('./birds'); ... app.use('/birds', birds);
静的リソースが複数のディレクトリに保存されている場合は、express.static ミドルウェアを複数回呼び出すことができます:
app.use(express.static('public')); app.use(express.static('files'));
如果你希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示:
app.use('/static', express.static('public'));
现在,你就爱可以通过带有 “/static” 前缀的地址来访问 public 目录下面的文件了。
http://localhost:3000/static/images/kitten.jpg http://localhost:3000/static/css/style.css http://localhost:3000/static/js/app.js http://localhost:3000/static/images/bg.png http://localhost:3000/static/hello.html
常见问题
如何处理 404 ?
在 Express 中,404 并不是一个错误(error)。因此,错误处理器中间件并不捕获 404。这是因为 404 只是意味着某些功能没有实现。也就是说,Express 执行了所有中间件、路由之后还是没有获取到任何输出。你所需要做的就是在其所有他中间件的后面添加一个处理 404 的中间件。如下:
app.use(function(req, res, next) { res.status(404).send('Sorry cant find that!'); });
Express 支持哪些模板引擎?
Express 支持任何符合 (path, locals, callback) 接口规范的模板引擎。
如何渲染纯 HTML 文件?
不需要!无需通过 res.render() 渲染 HTML。你可以通过 res.sendFile() 直接对外输出 HTML 文件。如果你需要对外提供的资源文件很多,可以使用 express.static() 中间件。
以上がNodejs の学習: 簡単なエントリと基本の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。