1

CLI を使用して Express 2.x アプリを作成しました。したがって、routes ディレクトリと index.js があります。これで、app.js で Redis に接続し、正常に動作しました。

ここで app.js から routes/index.js ファイルの関数を呼び出します。

app.post('/signup', routes.myroute);

myroute 関数には、Redis からキーを取得するためのコードが含まれています。

ここで、redis が定義されていないというエラーが表示されます。redis オブジェクトを app.js から routes/index.js に渡すにはどうすればよいですか?

4

2 に答える 2

1

最も簡単な解決策

app.js に redis lib を含む require() 関数が含まれている可能性があります。その行を取得して、index.js ファイルの先頭に追加するだけです。

node_redis モジュールを使用している場合は、単純にこれを含めます。

var redis = require("redis"),
client = redis.createClient();


代替アプローチ

既存の接続を再利用する場合は、client変数を index.js の関数に渡してみてください。

app.js

app.post('/signup', routes.myroute(client));

index.js

exports.myroute = function(client) {
    // client can be used here
}
于 2012-09-05T16:23:51.497 に答える
1

Express を使用しているため Connect を使用しているため、Connect ミドルウェアを使用します。特にセッションミドルウェア。Connect のセッション ミドルウェアには、ストア (セッションのものを保存する場所) の概念があります。そのストアは、メモリ内 (デフォルト) またはデータベース内にあります。したがって、redis ストア (connect-redis) を使用します。

var express = require('express'),
    RedisStore = require('connect-redis')(express),
util = require('util');

var redisSessionStoreOptions = {
    host: config.redis.host, //where is redis
    port: config.redis.port, //what port is it on
    ttl: config.redis.ttl, //time-to-live (in seconds) for the session entry
    db: config.redis.db //what redis database are we using
}

var redisStore = new RedisStore(redisSessionStoreOptions);
redisStore.client.on('error', function(msg){
    util.log('*** Redis connection failure.');
    util.log(msg);
    return;
});
redisStore.client.on('connect', function() {
    util.log('Connected to Redis');
});

app = express();

app.use(express.cookieParser());  
app.use(express.session({ 
        store: redisStore, 
        cookie: {   path: '/', 
                    httpOnly: true, //helps protect agains cross site scripting attacks - ie cookie is not available to javascript
                    maxAge: null }, 
        secret: 'magic sauce',  //
        key: 'sessionid' //The name/key for the session cookie
    }));

Connect セッション マジックは、すべてのルートに渡される「req」オブジェクトにセッションの詳細を配置します。この方法では、redis クライアントをあちこちに渡す必要はありません。req オブジェクトが機能するようにします。とにかく、各ルート ハンドラーで無料で取得できます。

必ず実行してください: npm install connect-redis

于 2012-09-05T23:41:35.053 に答える