1

私は、redis を使用して値を保存し、それらを取得するエクスプレス デモに従いました。そのコードを設定した高速アプリに適応させようとしたとき、期待した結果が得られませんでした。

主に、長さを取得しようとするとreq.online、null 値があるためエラーが発生します。

req.online.length以下のコードでは、何らかの値を持つことを期待していますが、常にそうnullであるため、エラーがスローされます。

この貼り付けのコードは機能します (req.online.lengthたとえば、2 になります): http://pastebin.com/w4ALpFiT

この貼り付けのコードは機能しません ( req.online.lengthnull であり、長さをチェックしようとするとエラーがスローされます): http://pastebin.com/r70juDZP

次を使用してredis cli経由で確認すると:

ZREVRANGEBYSCORE online +inf -inf

期待どおりに格納されたさまざまなユーザー エージェント値を確認できます。

この値を redis から取得して使用するにはどうすればよいですか?

4

1 に答える 1

1

この問題は、ミドルウェアの設定の順序に関連しています。app.use 呼び出しの順序は関連しています。詳細については、次の質問を参照してください。

Node.js / Express.js - app.router はどのように機能しますか?

実行の順序に疑問がある場合は、フローを理解するためにコードのさまざまな場所に console.log トレースを追加すると便利です。

ここでは、独自のミドルウェア関数を設定して Redis からデータを取得する前に app.use(app.router) を呼び出します。そのため、node.js は、ミドルウェア関数を呼び出す前にリクエストをルーティングします。その結果、get クエリが処理されるときに zrevrangebyscore が呼び出されず、req.inline が設定されません。

app.use(app.router) を呼び出す前にミドルウェア関数を定義して app.use すると、機能します。

于 2013-03-30T11:42:15.727 に答える