研究ノート-Express

エクスプレス

基本

理解急行

npm提供了大量的第三方模块,其中不乏许多Web框架,比如我们本章节要讲述的一个轻量级的Web框架 ——— Express。

Expressは、単純な、などの強力な機能の範囲を提供する可撓性のNode.js Webアプリケーション開発フレームワークである:等テンプレート解析、静的ファイル、ミドルウェア、ルーティング制御を、また、プラグインまたは他のモジュールと統合を使用することができあなたはWebおよびモバイルアプリケーションのさまざまなを作成するヘルプは、現在のNode.jsに基づいて、最も人気のあるWeb開発フレームワークである、とEJS、ヒスイや他のテンプレートをサポートして、あなたはすぐに完全に機能するウェブサイトを構築することができます。
  さて、始めましょう!
NPMインストール
npm install express
の参照を取得します

var express = require('express');
var app = express();
通过变量“app”我们就可以调用express的各种方法了,好戏刚刚开始,继续加油吧!

アプリケーションの作成

认识了Express框架,我们开始创建我们的第一个express应用。

app.js私たちのデフォルト品目マスタファイルに次の行を追加します。

var express = require('express');
var app = express();
app.get('/', function (request, response) {  
   response.send('Hello World!');
});
app.listen(80);

説明:後のコースで、我々は要求をリッスンするポート80を使用するように統一されます。
  添加が完了した後、簡単なExpressアプリケーションの内容を表示するにはあなたが見る「アドレステスト」右側の列、「Hello Worldのを!」の内容を表示するには、ブラウザが成功を作成しています。

リクエストを取得

前面我们实现了一个简单的express应用,下面我们就开始具体讲述它的具体实现,首先我们先来学习Express的常用方法。

getメソッド-クライアントから送信されたリクエストのパスGETリクエストを処理するために従いました。
  フォーマット:app.get(パス、関数(リクエスト、レスポンス));
  パスが要求の経路であり、2番目のパラメータが要求を処理するコールバック関数であり、二つのパラメータと応答要求は、要求情報、応答情報の代わりに、存在します。
次の例:

var express = require('express');
var app = express();
 
app.get('/', function(request, response) {
   response.send('Welcome to the homepage!');
});
app.get('/about', function(request, response) {
   response.send('Welcome to the about page!');
});
app.get("*", function(request, response) {
    response.send("404 error!");
});
app.listen(80); 

上記の例では、ページについて指定されたパス、およびすべてのパスのルートパスの処理方法。そして、内部コールバック関数、HTTPレスポンスのsendメソッドは、文字列を送信するためにブラウザに示します。
  上記のコードを参照すると、アドレスを成功させることができれば、自分自身に要求パス、ブラウザアクセス要求を取得しよう。

簡単なミドルウェア

ミドルウェア<ミドルウェア>
1.ミドルウェアとは何ですか?
ミドルウェア(ミドルウェア)HTTPリクエストハンドラは、ユーザがログインしているか否かをチェックするなどの様々な特定のタスクを実行するために使用され、データを分析し、他のユーザのタスクの前に、最終的な送信データに必要。その最大の特徴は、処理されたミドルウェアは、対応するデータは、その後、次の中間に渡すことができるということです。
2.ミドルウェアだけリクエストオブジェクトを渡し、何もしない、このような何か:

function Middleware(request, response, next) { 
   next();
}
上面代码的next为中间件的回调函数。如果它带有参数,则代表抛出一个错误,参数为错误文本。
function Middleware(request, response, next) { 
   next('出错了!');
}

エラーが投げ返された後、それはこれまでのエラー処理機能を見つけるまでミドルウェアは実行されません。あなたは次のメソッドを呼び出していない場合は、関数が実行され、後に登録されていません。

すべてのメソッド

和get函数不同app.all()函数可以匹配所有的HTTP动词,也就是说它可以过滤所有路径的请求,如果使用all函数定义中间件,那么就相当于所有请求都必须先通过此该中间件。
格式:app.all(path,function(request, response));
如下所示,我们使用all函数在请求之前设置响应头属性。
var express = require("express");
var app = express();
 
app.all("*", function(request, response, next) {
    response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });      //设置响应头属性值
    next();
});
 
app.get("/", function(request, response) {
    response.end("欢迎来到首页!");
});
 
app.get("/about", function(request, response) {
    response.end("欢迎来到about页面!");
});
 
app.get("*", function(request, response) {
    response.end("404 - 未找到!");
});
 
app.listen(80);

上記のコードのパラメータは、「*」パスに固有のプレフィックス、又は任意のパスを扱う場合、この方法は、我々は、任意の経路全ての機能によって予め要求されているかどうか、特に有用であり、全ての有効なパスを表します。
  場合は、我々はすべての機能をスキップして、何が起こるのだろう場合は、それを自分でみては?

基本的な使い方を使う1

use是express调用中间件的方法,它返回一个函数。
格式:app.use([path], function(request, response, next){});
可选参数path默认为"/"。
1.使用中间件

app.use(express.static(path.join(__dirname, '/')));
まだように、我々は、使用関数呼び出しを使用します(これはルート・パスであると仮定して)ミドルウェア、設定されたアクセスパスの静的ファイルのディレクトリを表現します。
2つの連続したミドルウェアを次の例にそれを呼び出す方法2:

var express = require('express');
var app = express();
 
app.use(function(request, response, next){
    console.log("method:"+request.method+" ==== "+"url:"+request.url);
    next();
});
 
app.use(function(request, response){
    response.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
    response.end('示例:连续调用两个中间件');
});
 
app.listen(80);
回调函数的next参数,表示接受其他中间件的调用,函数体中的next(),表示将请求数据传递给下一个中间件。
上面代码先调用第一个中间件,在控制台输出一行信息,然后通过next(),调用第二个中间件,输出HTTP回应。由于第二个中间件没有调用next方法,所以req对象就不再向后传递了。

使用方法2

この方法は、以下の例で、唯一のミドルウェアを使用して呼び出されたが、また、要求されたURLに応じて、ページのコンテンツを返すことができます。

var express = require("express");
var app = express();

app.use(function(request, response, next) {
   if(request.url == "/") {
      response.send("Welcome to the homepage!");
   }else {
      next();
   }
});
 
app.use(function(request, response, next) {
   if(request.url == "/about") {
     response.send("Welcome to the about page!");
   }else {
     next();
   }
});
 
app.use(function(request, response) {
  response.send("404 error!");
});
app.listen(80);

上記のコードrequest.url性により、URL要求が異なるコンテンツを返す、決定されます。

コールバック関数

Expressのコールバック関数は、2つのパラメータ、すなわち(REQと呼ばれる)要求および応答(RESと呼ばれる)、クライアントのHTTPリクエストの代わりに送信された要求を受け取り、応答はHTTP応答の代わりにクライアントに送信される、これら2つのパラメータがオブジェクトです。例としては、次のとおりです:

function(req, res) {
 
});

後者の研究では、我々は多くの場合、それに対処今心の中でそのフォーマットをキープ!
###ホスト、パス名を取得するために、
今日はHTTPリクエストにハンドルクライアントへのreqオブジェクトを使用する方法を学ぶ必要があります。
1.req.host復帰を要求されたホスト名が事前に取り込まれる(ポート番号が含まれていません)。
URLリクエストの2.req.pathリターンパス名。
次の例:

var express = require('express');
var app = express();
 
app.get("*", function(req, res) {
    console.log(req.path);
    res.send("req.host获取主机名,req.path获取请求路径名!");
});
 
app.listen(80);

ブラウザで任意の入力要求パス、REQを介してホスト名またはパスを表示するための要求を試してみてください。

リクエストを取得 - クエリ

クエリは、使用可能なクライアントオブジェクト属性GETリクエストのパスパラメータが解析されたリクエストパラメータオブジェクト、{}のデフォルトが含まれています。

var express = require('express');
var app = express();
 
app.get("*", function(req, res) {
    console.log(req.query.参数名);
    res.send("测试query属性!");
});
 
app.listen(80);

オブジェクトのパラメータ値はreq.queryを通じて要求パスをゲット。
フォーマット:req.queryパラメータ名;例次のリクエスト経路:
実施例1:/検索N =レンカ?

req.query.n  // "Lenka"

例2:/靴ため= DESC&シューズ[色=青&シューズ[タイプ] =逆

req.query.order  // "desc"
 
req.query.shoe.color  // "blue"
 
req.query.shoe.type  // "converse"

値の取得方法パラメータ「req.query。パラメータ名」要求を使用して、get要求のパスパラメータを試してみてください。

リクエストをゲット - PARAM

そして、属性検索では、我々は、リクエストパラメータがreq.paramによってオブジェクト値が解析され得ることができます。
フォーマット:req.param(「パラメータ名」);典型的要求パスは、以下:
実施例1:パラメータ取得値は、N /ように、ルート・パスを要求=レンカは、以下のように:?

var express = require('express');
var app = express();
 
app.get("/", function(req, res) {
    console.log(req.param("n")); //Lenka
    res.send("使用req.param属性获取请求根路径的参数对象值!");
});
 
app.listen(80);

実施例2:我々はまた、ルーティングルールと仮定し、対応するルーティングルールを有する要求されたオブジェクトを得ることができる
/ /ユーザの名前/、要求パス/ユーザ/マイク、次の通り:

app.get("/user/:name/", function(req, res) {
    console.log(req.param("name")); //mike
    res.send("使用req.param属性获取具有路由规则的参数对象值!");
});

PS:いわゆる「ルーティング」を別のアクセスパスを指し、異なるアプローチを指定します。
上記の例を読んで、req.param・オブジェクト要求を使用して、プロパティのパスを解決し、要求されたパラメータの値を取得してみてください。

要求を取得する - のparams

Paramのと似ていますが、のparamsを解決することができますが、複雑な名前は、オブジェクトの属性を要求されたルーティングルールが含まれています。
フォーマット:パラメータ名をreq.params;
例例1ルートのリクエストクラス、の上、次のように我々が得ることができるように:

var express = require('express');
var app = express();
 
app.get("/user/:name/", function(req, res) {
    console.log(req.params.name); //mike
    res.send("使用req.params属性获取具有路由规则的参数对象值!");
});
 
app.listen(80);

ビューの実行結果、およびのparam属性機能は、取得価額パラメータと同じ名前と同じです。
実施例2:もちろん、我々はまた、/のような/ユーザ複雑なルーティングルールを要求することができる:名前/:ID 、 リクエストアドレスが仮定される:/ユーザ/マイク/ 123、次のように

app.get("/user/:name/:id", function(req, res) {
    console.log(req.params.id); //"123"
    res.send("使用req.params属性复杂路由规则的参数对象值!");
});

ルーティングルールにパス要求アドレスの場合は、のparamsのparam属性よりプロパティは、それを少しので、まだ強力ではありません!

基本的な使い方を送ります

send()メソッドは、ブラウザに応答メッセージを送信し、インテリジェントに異なるタイプのデータを処理します。形式は次のとおりです。

res.send([body|status], [body]);

1.引数が文字列である場合には、Content-Typeのデフォルト設定は「text / htmlの」です。

res.send('Hello World'); //Hello World

引数が配列またはオブジェクトである場合には2、ExpressはJSONを返します。

res.send({ user: 'tobi' }); //{"user":"tobi"}
res.send([1,2,3]); //[1,2,3]

など3.引数が数値ではありません、そして体内で対応して上記の誰場合は、Expressはあなたが身体の応答を設定するのに役立ちます、:200文字は、「OK」を返します。

res.send(200); // OK
res.send(404); // Not Found
res.send(500); // Internal Server Error

出力応答、などHEADなどの情報、HTTPキャッシュなどをサポートするときの方法は、自動的にいくつかの設定を送信します。

着陸を準備

取り付けテンプレート

このレッスンから、我々はのの準備ができてリソースを取得してみましょう、シンプルなユーザー・サインオン機能を実現するために急行フレームワークを使用することを始めます。
  使用急行nodejsデフォルトのレンダリングテンプレートEJSあるフレームワーク、およびヒスイは、今日我々がEJSテンプレートに、例えば、基本的な機能のテンプレートページテンプレートのレンダリングについて持っています。
テンプレートのインストール方法を1.ejs

npm install ejs

2.次のディレクトリにインストールした後、次のように、どのように、それを呼び出すには:

//指定渲染模板文件的后缀名为ejs
app.set('view engine', 'ejs');

非常に不快にその方法を見つけるか、書き込みへのHTMLの形で使用したいと思うでしょう、コードを書くときにEJSデフォルトのテンプレートファイルはサポートのみEJS拡張子をレンダリングするために、それは使用中の可能性が、それを行う方法を、我々はテンプレートエンジンを変更する必要があります、また、エンジンの明示的な関数を使用します。
エンジン登録テンプレートエンジンの機能は、指定したファイルの拡張子を処理します。

// 修改模板文件的后缀名为html
app.set( 'view engine', 'html' );
// 运行ejs模块
app.engine( '.html', require( 'ejs' ).__express );

ファイルの拡張子を示す「__Express」、パブリックプロパティEJSモジュールは、レンダリングされます。

静的リソース

環境の制約のため、ここでは静的リソースを使用しませんが、実際の開発は、我々は確かに使用され、以下に示すルールの具体的な使用は、あなたが参照できます。
あなたは、Webページ内の静的ファイル(CSS、JS、IMG)をロードする場合は、ブラウザは非HTMLファイルを要求したとき、店の静的ファイルに別のディレクトリを指定する必要があり、サーバーは、関連する文書を見つけるために、このディレクトリに移動します。
プロジェクトディレクトリの下に1が公開されている店舗の静的ファイルにディレクトリを追加します。
3つの記憶JS、CSS、IMGディレクトリの下に公共のディレクトリを追加します。2.、対応する名前は、JavaScriptの、スタイルシート、画像です。
3.次に、あなたが適切なディレクトリに関連するファイルを置くことができます。
4.たとえば、ブラウザはスタイルシート以下の要求を発行します。

<link href="/stylesheets/bootstrap.min.css" rel="stylesheet" media="screen">

公共/スタイルシート/ディレクトリにサーバー側がbootstrap.min.cssファイルを検索します。
静的なカタログファイルでは、我々は起動ファイルで、この静的なファイルのパスを、それを伝える必要があり、あなたは次のように指定する必要があります。

app.use(express.static(require('path').join(__dirname, 'public')));

PS:express.static -指定した検索ディレクトリの静的ファイル。
指定されたミドルウェアを使用して使用する関数呼び出しは、ディレクトリ、「国民が私たちは私たちの新しいディレクトリ全体の静的なファイルを格納するために使用するものである静的なアクセスを表現します。

ビューの追加

さて、ここで我々は、我々は団結のルート・パスに置くテンプレートファイルを格納するための別のディレクトリを作成しますプロジェクトをページテンプレートを追加する必要があります。
さんが新しいindex.htmlを、login.htmlと、home.html 3つのページを見てみましょう。
次のようにindex.htmlのページへの参照は、以下のとおりです。

次のようにlogin.htmlページ参照は、次のとおりです。

次のようにhome.htmlページの参照は、以下のとおりです。

そして、静的ファイルは以下のように、我々は、ディレクトリ保存されたビューを設定する必要があります。

// 设定views变量,意为视图存放的目录
app.set('views', __dirname);

Webテンプレートやディレクトリを指定すると、次のようにそれらにアクセスすることができます。

ビューをレンダリング

どのように我々は、目的関数の解像度をレンダリングするために使用したページテンプレート、上でそれにアクセスします。
1.render機能、レンダリングのためのWebページテンプレート。
2.フォーマット:res.render([地元の人々について]ビュー、コールバック);
3.ビューパラメータは、レンダリングされた返された文字列を処理するためのテンプレートコールバックのファイル名で、オプションテンプレートをレンダリングするとき、コールバックは、地元の人々を省略することができるがかもしれまた、独自の使用に効果を見ることが最初のテンプレートの着信変数の値は、テンプレートは、変数を説教と呼ばれることができ、かつ後、私たちは、特定の用途を教えてくれますが、。
4.たとえば、私たちは追加のindex.htmlページをレンダリング、私たちがapp.jsに次のように書くことができます。

var express = require('express');
var app = express();
var path = require('path');
 
app.set('views', __dirname);
 
app.set( 'view engine', 'html' );
app.engine( '.html', require( 'ejs' ).__express );
 
app.get('/', function(req, res) {
    res.render('index');
});
 
app.listen(80);

テストアドレスを実行した後、我々は、レンダリングされたインデックス・ページを見たり、他のページにも成功し、レンダリングすることができますしようとするかどうか?

リダイレクト(リダイレクトの基本的な使い方)

この方法は、リダイレクトURLのリダイレクトを許可する特定のURLへのジャンプやステータス、302デフォルト・モードを指定することもできます。
フォーマット:res.redirect([状態]、URL );
例1:別のドメイン名への完全なURLジャンプを使用します。

res.redirect("http://www.hubwiz.com");

実施例2:以下のようにジャンプは、ランディングページとして、ページを指定しました。

res.redirect("login");

その後、私たちは、当社のウェブサイトにジャンプする方法を、着陸機能、最初の試みリダイレクトリダイレクトを実現するために始めましたか?

実現の着陸

アクセスビュー

我々はすでにビューテンプレートを追加して、それから最初の外観をビューにアクセスする方法を学びました。
1.次のコード、リクエストが成功することができるかどうかを確認するために、これらのパスにアクセスするためのアドレスバーを参照してください。

app.get('/', function(req, res) {
    res.render('index');
});
 
app.get('/login',function(req,res){
    res.render('login');
});
 
app.get('/home',function(req,res){
    res.render('home');
});

対応するビュー・ページを参照するには、ブラウザはそれが私たちのコードは問題ありませんことを示した場合、それを燃料に続け!

ポスト要求(ユーザログイン)

以前の私たちはそのポストリクエストメソッドを学ぶ今日、getメソッドの明示の請求を学びました。
方法1.post -クライアントPOSTリクエストによって送信された要求を処理するためのパス。
2.形式:app.post(パス、関数(REQ、RES));
3.同じおよび方法を得る、パスはパス要求である、第2のパラメータは、要求を処理するコールバック関数であり、RESはREQ要求情報を表し、応答情報。
例えばポストログイン要求処理4.、以下の実施例

app.post('/login',function(req,res){
});

ポスト方法を理解し、ここでは簡単なユーザのログイン機能を実現するためにポストを使用して開始します。

POSTリクエスト - ボディ(1)

ボディ-着陸を実装する前に、我々は、プロパティを理解するために開始します。
パスリクエストのパラメータ値によって得ることができるボディポストクライアント要求パラメータの分析的特性。
フォーマット:req.bodyパラメータ名;.
ここでは、身体属性の機能をテストするいくつかの準備を行います。
修正login.htmlと、ログインボタンの増加着陸イベント。
<input type="button" onclick="login();" value="登 陆">

function login(){
   var username = $('#username').val();
   var data = { "username": username };
   $.ajax({
           url:'/login',
           type:'POST',
           data:data
          });
}

ポストbody属性解析リクエストパラメータ値を使用するには、我々はインストールする必要があり、二つの中間基準体-パーサは表現multerと、次のように具体的な方法は以下のとおりです。
2.1インストール

npm install body-parser
npm install multer

2.2参照と呼び出し

var bodyParser = require('body-parser');
var multer = require('multer');
   ......
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(multer());

そして、データ処理およびポスト解析要求のボディパーサーmulterミドルウェア。
説明:このコースのmulterミドルウェアのバージョンは0.1.6を使用している、そのAPIは、最新バージョン(1.1.0)で異なっています。あなたがmulterのプロジェクトの新しいバージョンで使用したい場合は、を参照してください公式ドキュメント、またはインストール時にバージョンを指定します。

npm install [email protected]

POSTリクエスト - 体(2)

ここでは、不動産のポストリクエストボディのシンプルな使用をテストすることができます。
次のように完全なファイルの後1.変更の良いapp.js:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var multer = require('multer');
app.set('views', __dirname);
app.set( 'view engine', 'html' );
app.engine( '.html', require( 'ejs' ).__express );
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(multer());
app.get('/',function(req,res){
    res.render('login');
});
app.post("/login", function(req, res) {
    console.log("用户名称为:" + req.body.username);
});
app.listen(80);

ブラウザのテストアドレスを介してアクセスし、あなたが身体プロパティを通じて成功を達成することができるかどうか、ログオンするために、任意のユーザー名を入力してみてください?

ポスト着陸1

その後、我々は、私たちはいくつかの準備作業を行うことができます着陸機能を実現するために始めたクリックイベント、関連するボタンへのリンクを追加します。

1.修正index.htmlを、増加着陸リンク。
[登 录](login)
2.シンプルなポストの要求を実現するために、ログインページのログイン方法を強化:

 function login(){
    var username = $('#username').val();
    var password = $('#password').val();
    var data = { "username": username, "password":password};
    $.ajax({
             url:'login',
             type:'POST',
             data:data,
             success:function(data,status){
                  if(status == 'success'){
                      location.href='home';
                    }
             },
             error:function(data,status,e){
                  if(status == "error"){
                       location.href='login';
                     }
                   }
               });
       }

準備準備のWebページテンプレート、のは、スタートアップファイルの内容を変更することから始めましょうapp.js.

ポストは上陸2

ここでは、アプリの起動ファイルの内容を変更し始めます。

1.変更後の方法は、データベース・ユーザー名の名前はadminと仮定すると、パスワードはadminです。

app.post('/login',function(req,res){
    var user={
        username:'admin',
        password:'admin'
    }
if(req.body.username==user.username&&req.body.password==user.password)
    { 
       res.send(200);
    }else{
       res.send( 404 );
    }
});

2.次のように完全なスタートアップファイルはapp.js:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var multer = require('multer');
 
app.set('views', __dirname);
app.set( 'view engine', 'html' );
app.engine( '.html', require( 'ejs' ).__express );
 
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(multer());
 
app.get('/', function(req, res) {
    res.render('index');
});
app.get('/home',function(req,res){
    res.render('home');
});
app.get('/login',function(req,res){
    res.render('login');
});
app.post('/login',function(req,res){
    var user={
        username:'admin',
        password:'admin'
    }
 if(req.body.username==user.username&&req.body.password==user.password)      {
      res.send(200);
   }else{
      res.send( 404 );
   }
});
 
app.listen(80);

ここでは、簡単なポストログインが完了すると、ブラウザを使用しての効果を試すためにローカルポートを実行します!

アクセス制御ページ1

私たちの要求に応じて、シンプルな着地部分が完成されましたが、サイトはない優れたセキュリティで、私たちは、あなたも、ブラウザの入力に直接アクセスすることができ、home.htmlページは、もともと着陸後にのみアクセス可能だった、そして今、我々はログインする必要はありません、その繰り返しのテストを発見しましたこれは確かに我々が強化されるように再ログイン機能を持って、許可することはできません。
1.login.html増加EJSページテンプレート変数<% -メッセージ%>保存プロンプトログインしてください。

...
    <%- message %>
# 用户登录
...

ユーザー名を着信成功したジャンプと着地後2.home.htmlページ:

# 恭喜_<%= user.username %>_,登陆成功!

PS:エスケープ文字列エンコードされた出力によって、<%=変数名%>出力、デフォルトのエスケープを使用して使用EJSテンプレート変数の値。我々はいくつかの動的に生成されたHTMLタグをエクスポートしたい場合は、<% - variable_nam%>を使用することができ、出力を、このアプローチは、エスケープすることができないのエスケープコード化されました。
次のように3.home.htmlページは、出口リンクを追加します。

[退 出](logout)

2ページのアクセス制御

まあ修正テンプレートページには、スタートアップファイルの内容を変更するために開始することができますapp.js.
1.モジュールをインストールしていない参照については、インストールをして参照・セッションを発現します。
2.アクセス時間制限の新しいモジュールは、次の通り:

var session = require('express-session');
...
app.use(session({
    secret:'secret',
    resave:true,
    saveUninitialized:false,
    cookie:{
        maxAge:1000*60*10  //过期时间设置(单位毫秒)
    }
}));

次のように3.app.jsは、新しいファイルをミドルウェア、テンプレート変数の値を設定します。

app.use(function(req, res, next){
    res.locals.user = req.session.user;
    var err = req.session.error;
    res.locals.message = '';
    if (err) res.locals.message = '<div style="margin-bottom: 20px;color:red;">' + err + '</div>';
    next();
});

本体res.localsに応答して、ローカル変数の値が範囲内の最初の要求に格納されているオブジェクト。
PS:ミドルウェアの配置の順序は非常に重要であることに注意してくださいは、実行順序に相当します。動詞HTTPメソッドは実行されません前に、また、ミドルウェアは、配置する必要があります。

4.増加パスログアウト処理(ログインユーザ出口)指数と経路要求処理として、次の

app.get('/logout', function(req, res){
    req.session.user = null;
    req.session.error = null;
    res.redirect('index');
});
app.get('/index', function(req, res) {
    res.render('index');
});

5.変更ホームパス要求処理は、次の通り:

app.get('/home',function(req,res){
    if(req.session.user){
        res.render('home');
    }else{
        req.session.error = "请先登录"
        res.redirect('login');
    }
});

5.ポストログインの要求のパスを変更

app.post('/login',function(req,res){
    var user={
        username:'admin',
        password:'admin'
    }
 if(req.body.username==user.username&&req.body.password==user.password){
        req.session.user = user;
        res.send(200);
    }else{
        req.session.error = "用户名或密码不正确";
        res.send( 404 );
    }
});

まあ、全体の修正が完了し、テストアドレスへのアクセス再度の効果を試してみてください!

ルーティング着陸

使用ルート1

----異なるアクセスパスの経路は、異なるアプローチを指定します。app.jsでは、我々はこの問題のために複数のルーティングレコードを持つの状況に実行される、複数のルーティングがapp.postアプリケーションの実際の開発に異なるパスをルール、app.get指定し、我々はする必要がありますこれらのルーティングレコードは、管理を容易にするために、個別に行います。
私たちは、上陸した例に基づいて以下の変更を行います。
3 JSファイル名を追加します。1.ログイン、ホーム、ログアウトしています。
2.login.jsファイルには、次の行を追加します。

module.exports = function ( app ) {
    app.get('/login',function(req,res){
        res.render('login');
    });
 
    app.post('/login',function(req,res){
        var user={
            username:'admin',
            password:'admin'
        }
        if(req.body.username==user.username&&req.body.password==user.password){
            req.session.user = user;
            res.send(200);
        }else{
            req.session.error = "用户名或密码不正确"
            res.send( 404 );
        }
    });
}

3.home.jsファイルには、次の行を追加します。

module.exports = function ( app ) {
    app.get('/home',function(req,res){
        if(req.session.user){
            res.render('home');
        }else{
            req.session.error = "请先登录"
            res.redirect('login');
        }
    });
}

使用ルート2

4.logout.jsファイルには、次の行を追加します。

module.exports = function ( app ) {
    app.get('/logout', function(req, res){
        req.session.user = null;
        req.session.error = null;
        res.redirect('index');
    });
}

5.app.jsファイル要求パスログアウト、家庭、ログインコードを削除することができ
、次のように我々はそれを使用する方法を変更する6. 3つの新しいファイルを、非常に簡単です:

require('./login')(app);
require('./home')(app);
require('./logout')(app);

はい、それは簡単なので、私たちは単にルートにディレクトリを参照します。
ここに私たちのユーザーのログイン機能をオフに、安全で、今すぐにその効果を試してみてください!

公開された42元の記事 ウォンの賞賛4 ビュー4621

おすすめ

転載: blog.csdn.net/lucasxt/article/details/90177214