gpt4 book ai didi

javascript - NodeJS 快速 session (为什么未定义?)

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

这是我的“登录”层:

app.post('/sign', function(req, res) {
sess=req.session;

var query = 'SELECT * FROM ?? where ??=? AND ??=?';
var table = ["users", "name", req.body.login, "password", md5(req.body.password)];
query = mysql.format(query, table);
connection.query(query, function(err, rows) {
if(err) {
console.log(err);
return;
} else if(rows.length > 0) {
console.log("You have been sucessfully logged in.");
sess.login = req.body.login;
console.log(sess.login);
} else {
console.log("The name or password is incorrect.");
}
});
res.end();
});

如您所见,当用户存在于数据库中时,应该创建 session (实际上,console.log(sess.login) 在控制台中显示 session 的正确内容,因此创建了 session )。问题是当我更改图层时。

app.get('/', function(req, res) {
sess = req.session;
if(sess.login) {
res.render('indexo');
} else {
res.render('index');
}
console.log(sess.login);
});

为什么 sess.login 在这里未定义?这是我的其余代码(在各层之上)

/*******************************************/
/**/ var express = require('express'),
/**/ session = require('express-session'),
/**/ bodyParser = require('body-parser'),
/**/ ejs = require('ejs'),
/**/ mysql = require('mysql'),
/**/ md5 = require('md5');
/*******************************************/

var app = express();
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'simpledatabase'
});

connection.connect(function(error) {
if(error) {
console.log("There is a problem with connection to the database.");
return;
}
console.log("Connected with a database.");
});

app.use(session({
secret: 'test session',
resave: false,
saveUninitialized: true
}));
app.use(express.static('public'));
app.use('/js', express.static('bower_components/jquery/dist'));
app.use(bodyParser.json());
app.set('view engine', 'ejs');
app.set('views', 'public/views');

var sess;

当我以这种方式创建 sess.login 时,它是可见的:

app.post('/sign', function(req, res) {
sess=req.session;
sess.login = req.body.login; /****** HERE ******/
var query = 'SELECT * FROM ?? where ??=? AND ??=?';
var table = ["users", "name", req.body.login, "password", md5(req.body.password)];
query = mysql.format(query, table);
connection.query(query, function(err, rows) {
if(err) {
console.log(err);
return;
} else if(rows.length > 0) {
console.log("You have been sucessfully logged in.");
} else {
console.log("The name or password is incorrect.");
}
});
res.end();
});

但是您知道我只想在用户存在于数据库中的情况下创建 session 。

问题简而言之:如果我在“if”中创建 session ,则 sess.login 仅在“/login”层中可见。所有与数据库的连接都已正确设置,一切正常。

感谢您的帮助。

最佳答案

所以你的问题是你在查询回调的外部调用 res.end() 。这实际上终止了响应过程,并且您没有机会更新 req.session,因为在响应过程结束后不久(或更长时间)会调用回调。尝试将 res.end 放入回调中,我认为此后一切都会正常。

关于javascript - NodeJS 快速 session (为什么未定义?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246944/

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