【发布时间】:2019-12-12 18:32:47
【问题描述】:
我是网络开发领域的新手。我想创建一个“用户注册和登录”应用程序。但我未能在注册点将唯一用户信息保存到 MongoDB 中。这是我的代码...
型号:
const mongoose = require('mongoose');
// User Schema
const UserSchema = mongoose.Schema( {
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
username: { type: String, required: true, unique: true },
password: { type: String, required: true }
} );
const User = module.exports = mongoose.model( 'User', UserSchema );
控制器:
const express = require('express');
const router = express.Router();
const passport = require('passport');
const bcrypt = require('bcryptjs');
const Users = require('../models/userModel');
// post route for Register Process
router.post( '/register', ( req, res ) => {
const name = req.body.name;
const email = req.body.email;
const username = req.body.username;
const password = req.body.password;
const confirmPassword = req.body.confirmPassword;
// Check email or username already exists in DB
Users.find( { $or: [ {email: email}, {username: username} ] }, ( err, users ) => {
if( err ){ return console.log( err ); }
else{
// If email or username already exists in DB
if( users ){
if( users.length > 0 ){
for( let i = 0; i < users.length; i++ ){
let hasEmail = ( users[i].email == email );
let hasUsername = ( users[i].username == username );
if( hasEmail ){
return console.log( 'Email already registered.' );
}
else if( hasUsername ){
return console.log( 'Username already taken.' );
}
}
}
}
else{
// If email or username is unique / not exists in DB
// then save / create a new user
let newUser = new Users( {
name: name,
email: email,
username: username,
password: password,
confirmPassword: confirmPassword
} );
// Password hashing
bcrypt.genSalt( 10, ( err, salt ) => {
bcrypt.hash( newUser.password, salt, ( err, hash ) => {
if( err ){ return console.log( err ); }
newUser.password = hash;
// New user save in DB / create a new user
newUser.save( ( err ) => {
if( err ){
return console.log( err );
} else{
return console.log( 'You have registered successfully' );
}
} );
} );
} );
}
}
} );
} );
module.exports = router;
所有代码(带有服务器)都可以。如果输入 email 或 username 任何人已经存在于 DB 中,则会收到 error 消息。但是如果值是唯一的,newUser.save() 不会触发(不保存到数据库中)并且不会在控制台或浏览器中显示任何error 消息,页面连续加载。这里我使用$or: [ {email: email}, {username: username} ]通过email或username查找现有用户。
如何解决此问题?请帮帮我。
【问题讨论】:
-
But if value is unique表示您正在提供数据库没有的新用户名或电子邮件,在这种情况下它不会保存到数据库中?如果您提供新的用户名或电子邮件,您也可以打印users
标签: node.js mongodb express mongoose bcrypt