I am coding a MERN stack and this is my backend code:
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
when i console.log(req.session)
inside post("/signUp")
then i can see req.session.userId
but then when i console.log(req.session.userId)
in the "/uploadVid" route req.session.userId
becomes empty , why?????
I am using react and FormData() in the front end