Home > Blockchain >  Some unvisible problems in MongoDB, when i am trying to push data from registering from
Some unvisible problems in MongoDB, when i am trying to push data from registering from

Time:10-26

I wanted to create log/register site w/ Node.JS & MongoDB , but have an issue with MongoDb , when i am trying to push data to MongoDB collection. It's very confusing for me , other files like login.ejs i didnt use here yet , because cant solve this one. Register.ejs is i guess correct , because i can see data by console.log(newUser) and it gives me like `

{
  name: 'Aikyn',
  email: '[email protected]',
  password: 'asasdasdas',
  _id: new ObjectId("6357e652ccd077b202597632"),
  date: 2022-10-25T13:36:18.581Z
}
if (process.env.NODE_ENV !== 'production') {
    require('dotenv').config()
}
const User = require('./models/User')
const mongoose = require('mongoose')
const express = require('express');
const expressLayouts = require('express-ejs-layouts')
const app = express()
const bcrypt = require('bcrypt')
const flash = require('express-flash')
const session = require('express-session')
const passport = require('passport')
const initializePassport = require('./passport-config');

app.use(express.urlencoded({extended: false}))
app.use(express.static('public'));
app.use('/css', express.static(__dirname   'public/css'))
app.set('view-engine', 'ejs')
app.use(flash())
app.use(session({
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false
}))

app.use(passport.initialize())
app.use(passport.session())


app.get('/',(req,res) => {
    res.render('index.ejs')
})

app.get('/login', (req,res) => {
    res.render('login.ejs')
})
app.get('/register' , (req,res) => {
    res.render('register.ejs')
})
app.post('/register', async(req,res) => {
    let errors = []
    const {name, email,password } = req.body
    try {
        if (!name || !email || !password) {
            errors.push({msg: 'Please fill in all fields'})
        }
    
        if (password.length < 6) {
            errors.push({msg: 'Password should be at least 6 charaacters'})
        }
    
        if (errors.length > 0) {
           res.render('register', {
            errors,
            name,
            email,
            password
           })
        } else {
            User.findOne({email:email})
            .then(user => {
                if (user) {
                    errors.push({msg: "Email already exists"})
                    console.log('Email already exists')
                    res.render('register', {
                        errors,
                        name,
                        email,
                        password
                    })
                } else {
                    const newUser = new User({
                        name,
                        email,
                        password
                    })

                    console.log(newUser)
                    res.send('hello')
                }
            });
        }
    } catch {
        res.redirect('/register')
    }
})
app.post('/login', passport.authenticate('local', {
    successRedirect: '/',
    failureRedirect: '/login',
    failureFlash: true
}))


mongoose.connect(process.env.DATABASE_URL, {useNewUrlParser: true})
const db = mongoose.connection
db.on('error', error => console.error(error))
db.once('open', () => console.log('Connected succesfully to Mongoose'))
app.listen(process.env.PORT || 3000)

This is part of code, when i created a new schema for MongoDB, i guess there shouldnt be any problem

const mongoose = require('mongoose')

const UserSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    date: {
        type: Date,
        default: Date.now
    }
})

const User = mongoose.model('User', UserSchema)
module.exports = User

And this register.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
    <link rel="stylesheet" href="css/register.css">
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,500;0,700;1,400&display=swap');
    </style>
    <script src="https://kit.fontawesome.com/c95d1b22db.js" crossorigin="anonymous"></script>
</head>
<body>
    <div >
        <div >
            <form action="/register" method="POST">
                <div >
                    <span >Registraion page</span>
                </div>
                <div >
                    <input placeholder="Name" type="text" name="name">
                </div>
                <div >
                    <input placeholder="Email"type="email" name="email" required>
                </div>
                <div >
                    <input placeholder="Password" type="password" name="password" required>
                </div>
                <button type="submit">Register</button>
            </form>
            <div >
                <a>Already have an account?</a>
                <a href="/login">Log In</a>
            </div>
        </div>
    </div>
</body>
</html>

I tried to change some refers , i thought may be problem was there and also tried to create collection in MongoDB by myself , but nothing helped. I will be very thankful if u can find an issue in my code and reason why i cant push data to MongoDB

CodePudding user response:

I didn't check all the syntaxe but i think you forgot to save the new document you create, like this :

 User.findOne({email:email})
            .then(user => {
                if (user) {
                    errors.push({msg: "Email already exists"})
                    console.log('Email already exists')
                    res.render('register', {
                        errors,
                        name,
                        email,
                        password
                    })
                } else {
                    const newUser = new User({
                        name,
                        email,
                        password
                    })
                    newUser.save function (err) {
                    if (!err) {
                     console.log(newUser)
                      res.send('hello')
                     }
                }
            });
        }

you can check on the mongoose documentation : https://mongoosejs.com/docs/models.html#constructing-documents

  • Related