Javascript 节点Js会话用户id

Javascript 节点Js会话用户id,javascript,Javascript,您好,我刚刚接触Node.js,目前正在进行会话登录 为什么我不能在查询函数中设置会话 为什么我需要req.session.save来保存它,但是在重定向到某个页面会话之后,它仍然没有完全设置,页面需要刷新以显示会话 下面是我在设置会话中的功能 client.query( "Select id FROM users Where username = '" + req.body.username + "' AND password = '" + req.body.password + "'

您好,我刚刚接触Node.js,目前正在进行会话登录

为什么我不能在查询函数中设置会话

为什么我需要req.session.save来保存它,但是在重定向到某个页面会话之后,它仍然没有完全设置,页面需要刷新以显示会话

下面是我在设置会话中的功能

client.query(
    "Select id FROM users Where username = '" + req.body.username + "' AND password = '" + req.body.password + "'",
    function(err, result) {
        if (err) {
            return console.error('error running query', err);
        } else {
            done();
            req.session.user_id = result.rows;
            req.session.save();
            res.redirect('/wall');
        }
    });

您可能希望简化您的示例并澄清您正在使用的库。我假设您正在使用express和express session。我设置了一个简单的示例,当您转到/login?username=yourname页面时,它会将您重定向到另一个显示您的姓名的页面

var app = require('express')();
var http = require('http').Server(app);
var session = require('express-session');
var mysql = require('mysql')

app.use(session({secret: 'super secret'}));

var client = mysql.createConnection({
    host: "My",
    user: "private",
    password: "configuration",
    database: "my_db"
});

app.get('/login', function(req, res, next) {
    var sessionData = req.session;
    client.query('SELECT * from users where username = ?', [req.query.username], function(err, rows) {
        if(err) throw err;
        if (rows.length) {
            var user = rows[0]
            req.session.username = user.username;
            req.session.user_id = user.id
            res.redirect('/signed_in');
        } else {
            res.send("user not found")
        }
    })
})

app.get('/signed_in', function(req, res){
    res.send(req.session.user_id + "," + req.session.username);
});

http.listen(3000);
昆汀是对的,你应该注意sql注入。对于node,您通常会执行类似的操作,具体取决于您使用的sql库

client.query(
    "Select id FROM users Where username = ? AND password = ?", [req.body.username, req.body.password],
    function(err, result) {
    // Your code
}
至于为什么在重新加载页面后必须刷新页面,我想可能与done函数有关,因为我不知道它在代码中做什么。我不知道您为什么需要调用save,在我的示例中这不是必需的。

Danger!!:你的代码是开放的!