gpt4 book ai didi

javascript - NodeJS 变量 session 未定义

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:25 25 4
gpt4 key购买 nike

我正在尝试在 NodeJS 应用程序中设置一个 session 变量来存储当前用户。

不幸的是,我总是收到以下错误:

TypeError: Cannot set property 'user' of undefined

我的要求之一是我不应该使用数据库来存储 session ,因为这是一个学生项目,我必须尊重所要求的架构。

这是我用来登录我的用户的功能:

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');
}
});
};

当我不尝试将数据保存到 session 中时,一切都会按预期进行。

在此文件的开头,我有:

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实现 session 。

编辑2:当我第一次更改代码时,我想在不复制粘贴的情况下进行更改,并且按照网上的说明进行操作。但我确实尝试复制粘贴所有内容,删除了“商店”,现在似乎工作正常。

最佳答案

我会给你一个我之前工作中的例子,可能是对你有帮助

我使用了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 并将 session 存储在数据库中

在我的一个 api 中使用 session :

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);

}

用户可以使用 session 来存储从文本输入中获取的数据。

关于javascript - NodeJS 变量 session 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47829906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com