web-dev-qa-db-ja.com

Node.js:ExpressのすべてのHTTPリクエストで何かを行う方法は?

だから私は次のようなことをしたいと思います:

_app.On_All_Incoming_Request(function(req, res){
    console.log('request received from a client.');
});
_

現在のapp.all()にはパスが必要です。たとえば、この_/_を指定すると、ホームページにいるときにのみ機能するので、すべてではありません。

プレーンなnode.jsでは、httpサーバーを作成した後、ページルーティングを実行する前に何かを書くのと同じくらい簡単です。

では、これをエクスプレスでどのように行うのですか?それを行うための最良の方法は何ですか?

31
Adam

Expressは Connect ミドルウェアに基づいています。

Expressのルーティング機能はアプリのrouterによって提供され、独自のミドルウェアをアプリケーションに自由に追加できます。

var app = express.createServer();

// Your own super cool function
var logger = function(req, res, next) {
    console.log("GOT REQUEST !");
    next(); // Passing the request to the next handler in the stack.
}

app.configure(function(){
    app.use(logger); // Here you add your logger to the stack.
    app.use(app.router); // The Express routes handler.
});

app.get('/', function(req, res){
    res.send('Hello World');
});

app.listen(3000);

とても簡単です。

(追記:何らかのロギングが必要な場合は、Connectが提供する logger の使用を検討してください)

46
Rahman Kalfane

これを行う必要があります:

app.all("*", function (req, resp, next) {
   console.log(req); // do anything you want here
   next();
});
1
Abadis

Expressは ルートパスのワイルドカード をサポートしています。したがって、app.all('*', function(req, res) {})は1つの方法です。

しかし、それはルートハンドラーのためだけのものです。違いは、Expressルートハンドラーが応答を送信することが期待されていることです。そうでない場合、Expressは応答を送信しません。ヘッダーのチェックなど、明示的に応答を送信せずに何かを実行したい場合は、 Expressミドルウェア を使用する必要があります。 app.use(function(req, res, next) { doStuff(); next(); }

0
vkarpov15