6

express.jsにCookieを設定しようとしていますが、未定義が返されます。多くのWebページを検索して上に配置express.cookieParser()しましapp.use(app.router) たが、それでも正しい値を返すことができません。

app.js

app.configure(function(){
   var RedisStore = require('connect-redis')(express);
    app.use(express.logger());
    app.set('view options', { layout: false });
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.bodyParser({uploadDir: './uploads/tmp'}));
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session({ secret: "william", store: new RedisStore }));
//Initialize Passport!  Also use passport.session() middleware, to support
//persistent login sessions (recommended).
    app.use(passport.initialize());
    app.use(passport.session());
    //app.router should be after passportjs
    app.use(app.router);
    app.use(express.compiler({ src: __dirname + '/public', enable: ['less']}));
    app.use(express.static(path.join(__dirname, 'public')));
});

app.get('/', function(req, res) {
    res.cookie('cart', 'test', {maxAge: 900000, httpOnly: true})
});

app.get('/test', function(req, res) {
    res.send('testcookie: ' + req.cookies.cart);
});

結果:

testcookie: undefined
4

3 に答える 3

4

CookieはHTTPヘッダーに設定されます。res.cookie()HTTP結果のヘッダーを設定するだけで、実際にはHTTPを送信しません。コードが構文的に正しく、実行された場合、実際にはそのままで何も返されません。また、これであなたのコードのいくつかの構文のバグを修正しましたapp.get()

app.get('/', function(req, res) {
    res.cookie('cart', 'test', {maxAge: 900000, httpOnly: true});
    res.send('Check your cookies. One should be in there now');
});
于 2012-08-30T21:09:38.377 に答える
2

res.end()Cookieを設定した後、何かを送信するか、少なくとも電話をかける必要があります。それ以外の場合res.cookie()は、後で送信されるヘッダーのリストにいくつかのヘッダーを追加するだけです。

于 2012-08-30T16:57:43.830 に答える
0

Cookie名をvalueに設定します。これは、JSONに変換された文字列またはオブジェクトの場合があります。パスオプションのデフォルトは「/」です。

res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true });

詳細については、こちらのリンクをご覧ください

http://expressjs.com/api.html#res.cookie

于 2013-08-21T08:50:59.867 に答える