Node.js Express 环境下使用 cookie的问题

Node.js Express 环境下使用 cookie的问题

Node.js Express 环境下使用 cookie。 我用的是 Express3.1.0 ,没有使用cookieParser()。 用

res.cookie('name', loginname, {maxAge:600000, httpOnly:true, path:'/', secure:true});

这句设置了 cookie。

但不知道怎么读取 cookie。req 里面没有 cookies 的属性。即 req.cookiesundefined。请指教!


4 回复

当然可以!以下是如何在 Node.js 和 Express 3.1.0 环境下正确使用 Cookie 的详细说明。

如何设置 Cookie

首先,确保你已经安装了 cookie-parser 中间件,因为它可以帮助解析客户端发送的 Cookie。

你可以通过 npm 安装它:

npm install cookie-parser --save

然后,在你的 Express 应用中引入并使用 cookie-parser

var express = require('express');
var cookieParser = require('cookie-parser');

var app = express();
app.use(cookieParser());

// 设置一个 Cookie
app.get('/setcookie', function(req, res) {
    res.cookie('name', 'loginname', { maxAge: 600000, httpOnly: true, path: '/', secure: true });
    res.send('Cookie has been set');
});

如何读取 Cookie

现在,当你访问 /setcookie 路由时,Cookie 将会被设置。接下来,我们可以在其他路由中读取这些 Cookie。

例如,创建一个读取 Cookie 的路由:

app.get('/readcookie', function(req, res) {
    var name = req.cookies.name;
    if (name) {
        res.send('Your cookie value is: ' + name);
    } else {
        res.send('No cookie found');
    }
});

解释

  1. 安装和引入 cookie-parser:

    • cookie-parser 是一个中间件,用于解析客户端发送的 Cookie 并将其添加到 req.cookies 对象中。
    • 使用 app.use(cookieParser()) 在应用中启用该中间件。
  2. 设置 Cookie:

    • 使用 res.cookie() 方法来设置 Cookie。这个方法接受三个参数:Cookie 名称、值以及选项对象(如 maxAge, httpOnly, path, secure 等)。
  3. 读取 Cookie:

    • 当请求到达包含 cookieParser 中间件的路由时,req.cookies 对象将自动填充。
    • 你可以通过 req.cookies.name 来访问名为 name 的 Cookie 值。

希望这个例子能帮助你理解如何在 Node.js 和 Express 下使用 Cookie。如果你有任何进一步的问题,请随时提问!


楼主和我的问题一样呀,http://cnodejs.org/topic/518bb4a763e9f8a54251def8 请大牛帮帮忙了:)

还是自己解决了,分享给楼主。

You need to use express.cookieParser() before app.router; middleware is run in order, meaning it’s never even reaching cookieParser() before your route is executed.

app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(app.router);
app.use(express.static(__dirname + '/public'));

在 Node.js 和 Express 3.1.0 环境下,如果你没有使用 cookieParser() 中间件,那么 req.cookies 将会是 undefined。这是因为 cookieParser() 会解析请求中的 Cookie,并将它们放在 req.cookies 属性中。

解决方案

首先,确保你在应用中正确地引入并使用了 cookieParser() 中间件。以下是完整的示例代码:

var express = require('express');
var cookieParser = require('cookie-parser');

var app = express();
app.use(cookieParser());

// 设置 Cookie
app.get('/set', function (req, res) {
    res.cookie('name', 'loginname', { maxAge: 600000, httpOnly: true, path: '/', secure: true });
    res.send('Cookie 已设置');
});

// 读取 Cookie
app.get('/get', function (req, res) {
    if (req.cookies.name) {
        res.send('Cookie 值为: ' + req.cookies.name);
    } else {
        res.send('未找到 Cookie');
    }
});

app.listen(3000);

解释

  1. 引入中间件

    • 需要先引入 cookie-parser 库。
    • 使用 app.use(cookieParser()) 在应用中启用 Cookie 解析功能。
  2. 设置 Cookie

    • 使用 res.cookie() 方法来设置 Cookie。这里设置了一个名为 name 的 Cookie,值为 loginname,并配置了 maxAgehttpOnlypathsecure 参数。
  3. 读取 Cookie

    • 在另一个路由 /get 中,通过检查 req.cookies.name 来读取 Cookie 的值。如果存在,则返回其值;否则提示未找到 Cookie。

确保你的环境中已经安装了 cookie-parser 库。如果没有,可以通过以下命令安装:

npm install cookie-parser

以上代码应该能解决你遇到的问题,并帮助你正确地设置和读取 Cookie。

回到顶部