【问题标题】:couldn't get the cookie nodejs无法获取 cookie nodejs
【发布时间】:2022-01-03 08:30:58
【问题描述】:

我设置了一个 cookie,

router.get("/addCartToCookie", function(req, res) {
  let options = {
    maxAge: 1000 * 60 * 15,
    httpOnly: true, 
  };

  let cartData = {
    name: "test cookie",
    slug: slugify("test cookie"),
    productPictures: "K6B4dzGjN-teal.jpeg",
    price: 200,
    description: "testing cookies",
    quantity: 7,
  };

  // Set cookie
  res.cookie("cartName", cartData, options); 
  res.send("Cart Added to Cookie");
});

这完美地设置了一个名为“cartName”的cookie。但一旦我尝试拿到饼干, 它显示“cartName”未定义。

获取 Cookie 代码:

router.get("/getCartFromCookie", function (req, res) {
  res.send(req.cookies["cartName"]);
  console.log(req.cookies);
});

我尝试在控制台记录 cookie,但它也显示未定义。

【问题讨论】:

  • 已修复。问题是我努力导入并使用 cookie-parser

标签: javascript node.js express cookies


【解决方案1】:

据我所知,处理 cookie 的优化方法是使用 cookie-parser 依赖来表达。

$ npm install cookie-parser

然后您可以使用req.cookiesreq.signedCookies 属性轻松获取您的cookie,如下所示:

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

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

app.get('/', function (req, res) {
  // Cookies that have not been signed
  console.log('Cookies: ', req.cookies)

  // Cookies that have been signed
  console.log('Signed Cookies: ', req.signedCookies)

  // Your cart cookie
  console.log('Cookies: ', req.cookies.cartName)
})

app.listen(8080);

参考资料:

  1. https://github.com/expressjs/cookie-parser
  2. http://expressjs.com/en/resources/middleware/cookie-parser.html

【讨论】:

    【解决方案2】:

    您没有显示所有代码,但我假设您正在使用 cookie-parser middleware 直接访问请求对象上的 cookie。如果没有,请从添加 cookie-parser 开始,然后从那里开始。

    对于您的 cookie 读取问题,请注意您不能在同一个请求上发送和读取 cookie。您需要一个请求来设置 cookie,另一个请求来读取 cookie。

    import express from 'express';
    import cookieParser from 'cookie-parser'
    import {inspect} from 'util';
    
    const app = express();
    const router = express.Router()
    router.use(cookieParser())
    app.use(router);
    
    const port = 3000
    
    router.get('/setcookie', (req, res) =>{
      res.cookie('testCookie', 'magic content');
      res.send("set the cookie");
    })
    
    router.get('/readCookie', (req, res) =>{
      res.send('your cookies: ' + inspect(req.cookies['testCookie']));
      console.log(req.cookies);
    })
    
    app.listen(port, () => {
      console.log(`Example app listening at http://localhost:${port}`)
    })
    

    【讨论】:

      猜你喜欢
      • 2015-02-10
      • 2018-03-05
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 2020-07-19
      • 2022-01-12
      • 2020-07-13
      • 2018-07-01
      相关资源
      最近更新 更多