2017-10-04 46 views
0

我在我的快速應用中使用cookie-parser。當請求根頁面時,我使用res.cookie(name, value)在cookie上設置了一個隨機數,並將其設置爲正確(我在瀏覽器控制檯上進行了檢查)。但是當我嘗試登錄req.cookie時,它總是返回undefined。req.cookies返回undefined,但Cookie設置爲

這裏是我的代碼:

routes.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 
}); 
+0

正確的頭'req.headers.cookie' – robertklep

回答

1

要麼你要檢查req.headers.cookie將通過快遞進行設置。

或者如果你想使用存儲在req.cookies中的cookie-parse中間件的解析結果,那麼你的問題是你註冊路由和中間件的順序。

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

在執行完routes中的路由後,完成cookie的解析。

您需要將cookieParser()移到要使用它的路線之前。

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

這是它!謝謝。在路由之前更改了'cookieParser()',它起作用!謝謝 – medicengonzo

1

您將需要閱讀的餅乾作爲req.cookies['cookie-name']和設置的Cookie作爲resInit.cookie('cookie-name', 'cookie-value')