gpt4 book ai didi

javascript - req.cookies 返回 undefined 但 cookie 已设置

转载 作者:行者123 更新时间:2023-12-01 15:51:43 27 4
gpt4 key购买 nike

我正在使用 cookie-parser在我的 express 应用程序中。当请求根页面时,我使用 res.cookie(name, value) 在 cookie 上设置一个随机数它设置得很好(我在浏览器控制台上检查过)。但是当我尝试登录 req.cookie它总是返回未定义的。

这是我的代码:

路由.js

var express = require('express')
var router = express.Router()

var movieTrailer = require('movie-trailer');

var Promise = require('bluebird');
var logs = require('log-switch');
var fs = require('fs');
//var cookieParser = require('cookie-parser');

//Setup x-ray for scraping
var Xray = require('x-ray');
var x = Xray();

var debug = false;

router.get('/', (req, res) => {
console.log('Page requested!');
console.log('Cookies: ', req.headers.cookies); // For some reason this returns undefined

var scrapeMovies = function(){
return new Promise((resolve, reject) =>{
fs.readFile('moviesRT.json', (err,data) =>{
var movies = JSON.parse(data);
resolve(movies);
});
});
};

scrapeMovies().then(
movies => {
var randomInt = Math.floor(Math.random() * movies.length);
res.cookie('randomInt', randomInt);
var randomMovie = movies[randomInt];
movieTrailer(randomMovie.title, (err, url) =>{
console.log('Requesting trailer: ', randomMovie.title);
if(err) throw err;
var embedUrl = url.replace('watch?v=','embed/');
console.log('Video ID: ', url.slice(32,url.length));
randomMovie.trailerURL = embedUrl; //Add the embed URL to the randomMovie object before rendering it
res.render('main',randomMovie,
(err, html) =>
{
if(err) throw err;
console.log('Rendering...');
res.send(html);
console.log("Done!");
});
});
});

});

module.exports = router;

app.js
const express = require('express');

//Define app and settings
const app = express();
const exphbs = require('express-handlebars');
var cookieParser = require('cookie-parser');
const port = 3000;

var routes = require('./routes');

var debug = true;

app.use('/', routes);
app.use(express.static('public'));
app.use(cookieParser());
//app.use(cookieParser());

//View engine
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');

app.listen(port, function () {
console.log(`Server Starts on ${port}`);
if(!debug) logs.disable(); //Disable logging if debug variable is false
});

最佳答案

你要么想检查req.headers.cookie这将由 express 设置。

或者如果你想使用 cookie-parse 的解析结果存储在 req.cookies 中的中间件那么您的问题是您注册路由和中间件的顺序。

app.use('/', routes);
app.use(express.static('public'));
app.use(cookieParser());

cookie 的解析是在 routes 中的路由之后完成的。已被执行。

您需要移动 cookieParser()在您要使用它的路线之前。
app.use(cookieParser());
app.use('/', routes);
app.use(express.static('public'));

关于javascript - req.cookies 返回 undefined 但 cookie 已设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46566953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com