NodeJS 变量会话未定义
NodeJS Variable Sessions undefined
我正在尝试在我的 NodeJS 应用程序中设置一个应该存储当前用户的会话变量。
不幸的是,我总是收到以下错误:
TypeError: Cannot set property 'user' of undefined
我的要求之一是我不应该使用数据库来存储会话,因为这是一个学生项目,我必须尊重所要求的体系结构。
这是我用来登录我的用户的函数:
this.POSTLogin =function POSTLogin(LoginInformations,res,req){
//prepare request
var args = {
data:{username:LoginInformations.username,password:LoginInformations.password},
headers:{"Content-Type":"application/json"}
};
//check if credentials are valid
client.post(this.restBaseUrl+"users/login",args,function(data,response){
//logs for debug purpose
console.log(data);
console.log(response);
//if there is a user
if(response.statusCode == 200){
var usr = new User();
usr.email = data.email ;
usr.facebookData= data.facebookData;
usr.firstName = data.firstName ;
usr.id = data.id ;
usr.lastName = data.lastName ;
usr.restToken = data.restToken ;
usr.role = data.role ;
usr.sessions = data.sessions ;
var Rest = new RestService();
//this line doesn't work
req.session.user = usr;
//redirect to his personal page with data
Rest.GETPersonalStats(usr,res);
}else{
//is there is no user with those credentials, send it to login page again
res.redirect('/users');
}
});
};
当我不尝试将数据保存到会话中时,一切都按预期工作。
在这个文件的开头,我有:
var session = require('client-sessions');
var express = require('express');
var app = express();
app.use(session({
cookieName: 'session',
secret: 'someRandomString',
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000
}));
我确实将 "client-sessions" 添加到我的 package.json 文件中。
我关注了基于此 article.
的信息
编辑:
根据@Shoyeb Memon 的回答,我改为使用 cookie-session。我现在在我的声明中有这个:
var cookieParser = require('cookie-parser');
var cookieSession = require('cookie-session');
var app = express();
app.use(cookieParser('akey'));
app.use(cookieSession({
name:'session',
keys:['akey'],
maxAge: 24 * 60 * 60 * 1000
}));
但错误根本没有改变...
我使用 this 来实现会话。
编辑 2:
当我第一次更改我的代码时,我想不用复制粘贴来完成,然后我按照网上的说明进行操作。但我确实尝试了全部复制粘贴,我删除了 "store" 现在它似乎工作正常。
我会给你一个我以前工作的例子,可能是
对你有帮助
我用过express-session
const session = require('express-session');
const bodyParser = require('bosy-parser');
//Set Cookie
app.use(session(
{
name: 'myName',
secret: '#@$#!ng',
resave: true,
saveUninitialized: true,
overwrite: true,
unset: 'destroy',
rolling: true,
"cookie": {
maxAge: 1000 * 60 * 15000000
},
store: new (require('express-sessions'))({
storage: 'mongodb',
instance: mongoose, // optional
host: 'localhost', // optional
port: 27017, // optional
db: 'codepost', // optional
collection: 'mysessions', // optional
expire: 1000 * 60 * 15000000
})
}
));
我已经设置了 cookie 并将我的会话存储在我的数据库中
在我的 api 之一中使用会话:
const express = require('express');
const app = express();
const router = express.Router();
router.post("/validate", function(req,res){
req.session.phoneNumber = req.body.phoneNumber;//storing value into
// session
let userPhoneNumber = req.session.phoneNumber;//assigning to a var
console.log(userPhoneNumber);
}
用户可以使用会话来存储您从文本输入中获得的数据。
我正在尝试在我的 NodeJS 应用程序中设置一个应该存储当前用户的会话变量。
不幸的是,我总是收到以下错误:
TypeError: Cannot set property 'user' of undefined
我的要求之一是我不应该使用数据库来存储会话,因为这是一个学生项目,我必须尊重所要求的体系结构。
这是我用来登录我的用户的函数:
this.POSTLogin =function POSTLogin(LoginInformations,res,req){
//prepare request
var args = {
data:{username:LoginInformations.username,password:LoginInformations.password},
headers:{"Content-Type":"application/json"}
};
//check if credentials are valid
client.post(this.restBaseUrl+"users/login",args,function(data,response){
//logs for debug purpose
console.log(data);
console.log(response);
//if there is a user
if(response.statusCode == 200){
var usr = new User();
usr.email = data.email ;
usr.facebookData= data.facebookData;
usr.firstName = data.firstName ;
usr.id = data.id ;
usr.lastName = data.lastName ;
usr.restToken = data.restToken ;
usr.role = data.role ;
usr.sessions = data.sessions ;
var Rest = new RestService();
//this line doesn't work
req.session.user = usr;
//redirect to his personal page with data
Rest.GETPersonalStats(usr,res);
}else{
//is there is no user with those credentials, send it to login page again
res.redirect('/users');
}
});
};
当我不尝试将数据保存到会话中时,一切都按预期工作。
在这个文件的开头,我有:
var session = require('client-sessions');
var express = require('express');
var app = express();
app.use(session({
cookieName: 'session',
secret: 'someRandomString',
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000
}));
我确实将 "client-sessions" 添加到我的 package.json 文件中。 我关注了基于此 article.
的信息编辑: 根据@Shoyeb Memon 的回答,我改为使用 cookie-session。我现在在我的声明中有这个:
var cookieParser = require('cookie-parser');
var cookieSession = require('cookie-session');
var app = express();
app.use(cookieParser('akey'));
app.use(cookieSession({
name:'session',
keys:['akey'],
maxAge: 24 * 60 * 60 * 1000
}));
但错误根本没有改变... 我使用 this 来实现会话。
编辑 2: 当我第一次更改我的代码时,我想不用复制粘贴来完成,然后我按照网上的说明进行操作。但我确实尝试了全部复制粘贴,我删除了 "store" 现在它似乎工作正常。
我会给你一个我以前工作的例子,可能是 对你有帮助
我用过express-session
const session = require('express-session');
const bodyParser = require('bosy-parser');
//Set Cookie
app.use(session(
{
name: 'myName',
secret: '#@$#!ng',
resave: true,
saveUninitialized: true,
overwrite: true,
unset: 'destroy',
rolling: true,
"cookie": {
maxAge: 1000 * 60 * 15000000
},
store: new (require('express-sessions'))({
storage: 'mongodb',
instance: mongoose, // optional
host: 'localhost', // optional
port: 27017, // optional
db: 'codepost', // optional
collection: 'mysessions', // optional
expire: 1000 * 60 * 15000000
})
}
));
我已经设置了 cookie 并将我的会话存储在我的数据库中
在我的 api 之一中使用会话:
const express = require('express');
const app = express();
const router = express.Router();
router.post("/validate", function(req,res){
req.session.phoneNumber = req.body.phoneNumber;//storing value into
// session
let userPhoneNumber = req.session.phoneNumber;//assigning to a var
console.log(userPhoneNumber);
}
用户可以使用会话来存储您从文本输入中获得的数据。