You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+MongoDB注册功能无法写入数据库问题求助

问题:Node.js + MongoDB注册数据无法存入数据库

我正在开发一个基于Node.js和MongoDB的登录/注册站点,但遇到了注册数据无法推送到MongoDB集合的问题。目前还没使用login.ejs等其他文件,因为这个核心问题还没解决。

我确认register.ejs是正常的,因为通过console.log(newUser)能看到完整的用户数据:

{
  name: 'Aikyn',
  email: 'someemail9@gmail.com',
  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)

User模型代码

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

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 class="page">
        <div class="card">
            <form action="/register" method="POST">
                <div class="welcome-page">
                    <span class="welcome">Registraion page</span>
                </div>
                <div class="name">
                    <input placeholder="Name" type="text" name="name">
                </div>
                <div class="email-input">
                    <input placeholder="Email"type="email" name="email" required>
                </div>
                <div class="password">
                    <input placeholder="Password" type="password" name="password" required>
                </div>
                <button type="submit">Register</button>
            </form>
            <div class="register">
                <a>Already have an account?</a>
                <a href="/login">Log In</a>
            </div>
        </div>
    </div>
</body>
</html>

我已经尝试过修改文件引用路径,也手动创建过MongoDB集合,但都没能解决问题。希望有人能帮我找出代码里的问题,以及数据无法存入MongoDB的原因。

内容的提问来源于stack exchange,提问作者Aikyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:10:40