2013-02-20 4 views
0

Я играю с узлом и пытаюсь установить cookie на запрос, но получаю неопределенное исключение. Вот мой пример приложенияНеопределенное исключение при получении cookie

var express = require('express'); 

var app = module.exports = express(); 

process.env.NODE_ENV = 'production'; 

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

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

    res.send("OK"); 
}); 

app.get('/users/:id', function(req, res) { 
    var s = req.params.id; 

    res.send('testcookie: ' + req.cookies.cart); 
});  


app.listen(3000); 
console.log('Listening on port 3000'); 

можно проверить в Чарльзу, что я получаю и возвращение печенье:

enter image description here

Но результат каждый раз, когда я иду в /users:id (где: идентификатор, очевидно, некоторые number) Я получаю сообщение о том, что объект cookie не определен.

TypeError: Cannot read property 'cart' of undefined 
    at c:\Projects\app\app.js:29:42 
    at callbacks (c:\Projects\app\node_modules\express\lib\router\index.js:161:37) 
    at param (c:\Projects\app\node_modules\express\lib\router\index.js:135:11) 
    at param (c:\Projects\app\node_modules\express\lib\router\index.js:132:11) 
    at pass (c:\Projects\app\node_modules\express\lib\router\index.js:142:5) 
    at Router._dispatch (c:\Projects\app\node_modules\express\lib\router\index.js:170:5) 
    at Object.router (c:\Projects\app\node_modules\express\lib\router\index.js:33:10) 
    at next (c:\Projects\app\node_modules\express\node_modules\connect\lib\proto.js:199:15) 
    at Object.expressInit [as handle] (c:\Projects\app\node_modules\express\lib\middleware.js:31:5) 
    at next (c:\Projects\app\node_modules\express\node_modules\connect\lib\proto.js:199:15) 

Я прочитал все другие SO вопросы о помещении cookieParser выше другого промежуточного программного обеспечения, и со всех счетов этот пример должен работать, но я в растерянности относительно того, чего не хватает.

ответ

1

Хорошо, получается, что это связано с тем, как я установил app.configure. Функция обратного вызова configure не вызывалась, потому что внутренняя часть настройки приложения не вызывала функцию инициализации для production ENV, хотя я думал, что это явно указано выше.

Чтобы исправить это, я сменил process.env.NODE_ENV на app.settings.env, и все приступило к работе.

Обнаружили эту информацию здесь: how to find out the current NODE_ENV the express app is running under?

Смежные вопросы