【问题标题】:Get "undefined" for req.session in nodejs在nodejs中为req.session获取“未定义”
【发布时间】:2018-12-27 10:26:41
【问题描述】:

这里是菜鸟,我试图在 nodejs 中建立一个会话来进行登录尝试计数,但似乎会话没有在路由中声明,因为它只是在我 console.log 时显示未定义。

下面是我的代码:

服务器.js

var express = require('express');
var session = require('express-session');
var cors = require('cors');
var bodyParser = require("body-parser");
var app = express();
var port = process.env.PORT || 3000;


app.use(bodyParser.json());
app.use(cors());
app.use(session({ resave: false, saveUninitialized: true,  secret: 'onemonkey', cookie: { secure: false }}));


app.use(bodyParser.urlencoded({
    extended: false
}));

var Users = require('./Routes/Users');

app.use('/users',Users);

app.listen(port,function(){
    console.log("Server is running on port: "+port);
});

在 users.js 中

var express = require('express');
var users = express.Router();
var database = require('../Database/database');
var cors = require('cors')
var jwt = require('jsonwebtoken');
const bcrypt = require('bcrypt');
//var request = require('request');
var token;

users.use(cors());

users.post('/login', function(req, res) {

    var appData = {};
    var email = req.body.email;
    var password = req.body.password;

    let someRows, otherRows;
    let token;
    var databaseQuery = new database.DatabaseQuery();
        databaseQuery.beginTransaction()
        .then (() => {
             return databaseQuery.query('SELECT * FROM users WHERE email = ? AND status = ?', [email, 'active'])
            })
            .then( rows => {

                someRows = rows;
                if (someRows.length > 0) {
                    bcrypt.compare(password, someRows[0].password).then(function(ret) {
                    // res == true
                        if(ret){
                            //when validate successfully 
                        }else{
                            console.log(req.session[email]);
                            req.session[email] = req.session[email] + 1;
                            req.session.save();
                            console.log('--------login-----');
                            console.log(req.session[email]);
                            if(req.session[email] == 3){
                                databaseQuery.query('update users set status=? where email=?',['block',email])
                                .then( rows => {    
                                    otherRows = rows;
                                    var user_status = {
                                        contact_id : someRows.insertId,
                                        remark : "3 times login attempt fail",
                                        status : "block",
                                        edit_by : "SYSTEM"
                                    }

                                    return databaseQuery.query( 'INSERT INTO user_status_detail SET ?', [user_status] );

                                }).then ( rows =>{
                                    appData.error = 1;
                                    appData["data"] = "Email account blocked";
                                    req.session[email] = null;
                                    req.session.save();
                                    res.status(200).json(appData);
                                    return databaseQuery.commit();

                                }, err => {
                                    return databaseQuery.close.then( () => { throw err; } )
                                })
                            }else{
                                //record not match
                            }   
                        }                   
                    });
                }else {
                    //account not exist
                }
            })
            .catch( err => {
                //err handling
            } )
});
module.exports = users;

我尝试将计数存储在 user.js 中的 req.session[email] 中,并在计数等于 3 时阻止电子邮件。但是,它不存储计数并在每次我尝试登录时显示未定义错误密码。

非常感谢您的建议。

【问题讨论】:

  • 你解决了吗?
  • no..我在上面添加了 app.use(session({})).. 但它仍然是一样的..
  • 谁能找到根本原因?我仍然无法解决..

标签: node.js express-session


【解决方案1】:

将这些行添加到顶部: app.use(express.json()) app.use(express.urlencoded({ extended: true }))

【讨论】:

  • 没有..我在 app.use(session({})) 上面添加了.. 但它仍然一样.. 不工作
猜你喜欢
  • 2014-04-24
  • 2019-04-12
  • 1970-01-01
  • 2013-12-11
  • 2016-09-28
  • 1970-01-01
  • 2014-08-20
  • 2012-09-24
  • 2015-10-15
相关资源
最近更新 更多