2017-05-25 45 views
1

我是NodeJS中的新成員,我正在嘗試使用會話。但我堅持這個錯誤。任何形式的幫助表示讚賞。ReferenceError:請求未在NodeJS中定義會話

代碼: -

var express = require('express'); 
var jsonFile = require('jsonfile'); 
var NodeSession = require('node-session'); 
var router = express.Router(); 

session = new NodeSession({secret: 'Q3UBzdH9GEfiRCTKbi5MTPyChpzXLsTD', 'lifetime': 60 * 1000, 'secure': true, 'encrypt': true}); 

session.startSession(request, response, function() { 
    // server handler goes here 
    // req.session available 
}); 

function restrict(req, res, next) { 
    if (req.session.has('sessnm')) { 
     next(); 
    } else { 
     res.redirect('/'); 
} 

它顯示我在這一行錯誤: -

session.startSession(request, response, function() { 
+1

我認爲你的'startSession'函數應該放在一些路由處理程序中,這樣它纔會在有請求時纔會觸發,而不是在應用程序啓動時觸發。 –

+0

@MohitBhardwaj - 喜歡這個?? router.get('/',function(req,res,next){ session.startSession(function(request,response){ }); res.render('index',{title:'Login Page' }); }); –

回答

2

據我所知,startSession應該在上下文中使用,其中一個請求,迴應是可用的,例如作爲中間件:

app.use(function (req, res, next) { 
    session.startSession(req, res, function() { 
     // ...   
     next(); 
    }); 
}) 

其中app是您的服務器實例,例如, app = express()

+0

不,我的壞 - 這是正確的api的確,但它的意思是當req/res可用時使用 - 編輯答案 –

+0

我已經試過這個,但它不會幫助我... –

+1

我認爲,而不是將其添加到每條單一路由中,您可以將其添加爲包含全部或多個路由的文件頂部的常見中間件。你可以使用'app.use'來做到這一點。 –