express-session 仅在 post 请求中将属性保存到会话,但当我加载另一条路由时会话变为空

问题描述 投票:0回答:0

我正在编写 MERN 堆栈,这是我的后端代码:

const exp = require('express');
const mongose = require('mongoose');
const models = require('./db');
const bcrypt = require('bcrypt');
const multer = require('multer');
const auth = require('express-session');
const MongoStore = require('connect-mongo');
const cors = require('cors');

const Video = models.Video;
const User = models.User;
const Comment = models.Comment;
const Reply = models.Reply;

mongose.connect('mongodb://127.0.0.1/vidDB');
mongose.connection.once('open' , function(){console.log("DB is connected")})
       .on('error' , function(err){console.log("error:" , err)});

const app = exp();

app.all('/*', function (req, res, next) {
    res.header('Access-Control-Allow-Credentials', true); //this is you are missing
    next();
  });

app.use('/static', exp.static('public'));
app.use(auth({
    secret: 'ab',
    resave: false,
    saveUninitialized: true,
    store: MongoStore.create({ 
        mongoUrl: 'mongodb://127.0.0.1/vidDB'
    })
}));

app.use(cors({
    origin:'http://localhost:3000', 
    allowedHeaders: ['Content-Type']
    //credentials: false
    //exposedHeaders: ['*', 'Authorization' ] 
}));

const storage = multer.diskStorage({
    destination: function (req, file, cb) {
      if(file.fieldname == 'f1'){
        cb(null , './public/userImg')
      }
      else if(file.fieldname == 'f2Thumb') {
        cb(null , './public/videoThumbnai')
      }
      else if(file.fieldname == 'f3Vid') {
        cb(null , './public/videoUploaded')
      } 
    },
    filename: function (req, file, cb) {
      cb(null, file.originalname)
    }
});
const upload = multer({ storage: storage });

/**********************************************************************/

app.get('/add' , function(req ,res){
    req.session.auth = 'yesAuth';
    res.end();
});

app.get('/check' , function(req ,res){
    console.log(req.session);
    res.end();
});

app.get('/logout' , function(req , res){
    console.log(req.session);
    req.session.destroy(function(err){
        if(req.session === undefined){
            console.log('session is distroyed');
            console.log(req.session);
            console.log(err);
            res.end();
        }
        else{
            console.log('errrrr');
            console.log(err);
            console.log(req.session);
            res.end();
        }
    });
});

app.post('/signUp' , upload.fields([{name: 'f1'}]) , function(req , res){
    //console.log(req.body);
    //console.log(req.files);
    console.log(req.session);
    User.find({$or: [{email: req.body.emaiil}, {userName: req.body.userNamee} ]})
        .then(function(usersArray){
            if(usersArray.length===0){
                if(req.body.passworrd === req.body.confirmPassworrd){
                    bcrypt.hash(req.body.passworrd , 10).then(function(hash){
                        req.body.passworrd = hash;

                        const newUser = {userName: req.body.userNamee , 
                                         email: req.body.emaiil , 
                                         password: req.body.passworrd , 
                                         image: 'userImg/' + req.files.f1[0].originalname};
                        User.create(newUser).then(function(user){ 
                            console.log(user);
                            req.session.userId = user._id;
                            req.session.save(function(err){
                                if(err){
                                    console.log(err);
                                } 
                                else{
                                    console.log(req.session);
                                    res.end(); 
                                }
                            });                                    
                        });
                    });
                }
            }
            else {
                res.send('repeatedUser');
            }
        });
});

app.post('/logIn' , function(req , res){
    console.log("yyy")
    //console.log(req.body)
    
    User.find({email: req.body.emaill}).then(function(users){
        console.log(users)
        if(users.length===1){
            console.log(users)
            bcrypt.compare(req.body.passwordd , users[0].password)
                  .then(function(result){
                    if(result === true){
                        req.session.userId = users[0]._id;
                        //console.log(req.session);
                        res.end(); //not complete
                    }
                    else{
                        res.send("WrongPassword");
                    }                    
                  });
        }
        else{
            res.send('Email does not exist');
        }
    });
});


app.get('/auth' , function(req,res){
    console.log(req.session);
    res.send("authh");
})

app.post('/uploadVid' , upload.fields([{name: 'f2Thumb'} , {name: 'f3Vid'}]) , function(req ,res){
    console.log(req.session);
    res.end()
    // if(req.session.userId){
        // console.log(req.body);
        // console.log(req.files)
        // const newVideo = {title: req.body.titlee , 
        //               thumbnail: 'gg' , 
        //                videoUrl: 'uu'  
        //                    };

        // Video.create(newVideo).then(function(vid){
        //     console.log(vid);
        //     res.end();
        // });                               
    //}
    //else{
        //console.log('Please, log in before upload')
    //}
});

app.listen(process.env.port || 4000 , function(){
    console.log("express app is ready");
});

//https://stackoverflow.com/questions/48367558/nodejs-express-session-don%C2%B4t-save-the-session
//https://www.section.io/engineering-education/session-management-in-nodejs-using-expressjs-and-express-session/#:~:text=Express%2Dsession%20%2D%20an%20HTTP%20server,established%20on%20the%20server%2Dside.
//https://www.npmjs.com/package/express-session#options

当我

console.log(req.session)
post("/signUp")
里面然后我可以看到
req.session.userId
但是当我
console.log(req.session.userId)
在“/uploadVid”路线
req.session.userId
变空,为什么????? 我在前端使用 React 和 FormData()

save mern express-session
© www.soinside.com 2019 - 2024. All rights reserved.