2013-02-20 41 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(其中:id爲明顯一些號碼)我收到一條消息,指出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) 

我讀過所有其他的做題關於把cookieParser其他中間件之上,並從所有帳戶的這個例子應該工作,但我很茫然,什麼缺失。

回答

1

好的,事實證明它與我如何設置app.configure有關。配置回調函數沒有被調用,因爲應用程序配置的內部沒有調用production ENV的初始化函數,即使我認爲它是上面明確設置的。

爲了解決這個問題,我將process.env.NODE_ENV更改爲app.settings.env,並且所有東西都開始工作。

此處發現信息:how to find out the current NODE_ENV the express app is running under?

相關問題