2016-11-23 11 views
1

サーバーとクライアントのブラウザ間の信頼性の高いWebsocket接続にexpress-wsを使用している私のWebサーバーのサンプルコードを紹介しました。コードはポート3000でWebSocket接続のリスニングを開始します。nodejsのexpress-wsモジュールでnext()を呼び出す

var express = require('express'); 
var app = express(); 
var expressWs = require('express-ws')(app); 

app.use(function (req, res, next) { 
    console.log('middleware'); 
    req.testing = 'testing'; 
    return next(); 
}); 

app.get('/', function(req, res, next){ 
    console.log('get route', req.testing); 
    res.end(); 
}); 

app.ws('/', function(ws, req) { 
    ws.on('message', function(msg) { 
    console.log(msg); 
    }); 
    console.log('socket', req.testing); 
}); 

server.listen(3000); 

express-websocketでnext()APIを使用するとどうなりますか?

答えて

1

スタック内の次のmiddlewareを呼び出します。

ミドルウェア関数は、アプリケーションの要求応答サイクルで要求オブジェクト(req)、応答オブジェクト(res)、および次のミドルウェア関数にアクセスできる関数です。次のミドルウェア機能は、一般に次の名前の変数で表されます。ミリオウェア機能では、次のタスクを実行できます。

  • 任意のコードを実行します。
  • 要求オブジェクトと応答オブジェクトを変更します。
  • 要求 - 応答サイクルを終了します。
  • スタック内の次のミドルウェアを呼び出します。現在のミドルウェア機能は、要求 - 応答 サイクルを終了しない場合

、それは()の次のミドルウェア 関数に制御を渡す次のコールしなければなりません。それ以外の場合、リクエストはハングアップのままになります。 explanation 単純なhello worldの例を使用して表現し、後でミドルウェア機能を定義します。

var express = require('express'); 
var app = express(); 
app.get('/', function (req, res) { 
    res.send('Hello World!'); 
}); 
app.listen(3000); 

ミドルウェア機能

var myLogger = function (req, res, next) { 
    console.log('LOGGED'); 
    next(); 
} 

お知らせnext()に上記の呼び出し。この関数を呼び出すと、アプリケーション内の次のミドルウェア関数が呼び出されます。 next()関数はNode.jsまたはExpress APIの一部ではありませんが、ミドルウェア関数に渡される3番目の引数です。 next()関数の名前は何でもかまいませんが、慣例では常に“next”と命名されています。混乱を避けるために、常にこの規則を使用してください。

ミドルウェア機能をロードするには、ミドルウェア機能を指定してapp.use()を呼び出します。たとえば、次のコードは、ルートパス(/)へのルートの前にmyLoggerミドルウェア関数をロードします。

var express = require('express'); 
var app = express(); 
var myLogger = function (req, res, next) { 
    console.log('LOGGED'); 
    next(); 
} 
app.use(myLogger); 
app.get('/', function (req, res) { 
    res.send('Hello World!'); 
}); 
app.listen(3000); 

アプリがリクエストを受信するたびに、端末は「LOGGED」というメッセージを端末に出力します。

ミドルウェアのロード順序は重要です。最初にロードされるミドルウェア機能も最初に実行されます。

ルートパスのルートの後にロードされた場合、ルートパスのルートハンドラがリクエスト - 応答サイクルを終了するため、要求はそれに到達せず、アプリケーションは "LOGGED"を出力しません。

ミドルウェア機能myLoggerは単にメッセージを出力し、次にnext()関数を呼び出すことによって、要求をスタック内の次のミドルウェア機能に渡します。

Source Expressjs guide article

1

あなたは急行のアプリケーションで使用するためのミドルウェアの書き方を学びたいのであれば

Writing middleware for use in express apps

、このガイドに従ってください
関連する問題