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
相关产品推荐
相关产品推荐

