NodeJS博客实战08_用户注册和数据库验证

1.注册写入数据库

在上一篇文章中在后端验证了用户注册输入信息不合法的情况,本篇主要讲解当用户输入合法后数据库写入的内容

写入数据则需要对数据库进行操作,前面介绍了使用mongoose模块的Schema对象方法定义user的表结构,使用moogoose的model方法定义了模型类,通过对模型类的操作来操作数据库

在api.js引入之前定义的数据库模型类命名为User,

moogoose模型类提供了findOne()方法用于查找数据中对应字段,可以利用此方法查找该用户名是否被注册;

若没有注册则将用户信息存入数据库,但是需要使用模型类的对象方法,即需要new出一个User对象执行该对象的save()方法

api.js:

var express = require('express');
var router = express.Router();
var User = require('../models/User');//引入模型类
//定义返回变量格式
var resData; 
router.use(function(req,res,next){
	resData = {
		code:0,
		message:''
	};
	next();
})
//注册逻辑
router.post('/user/register',function(req,res,next){
	var username = req.body.username;
	var password = req.body.password;
	var repassword = req.body.repassword;
	//用户名不能空
	if(username == ''){
		resData.code = 1;
		resData.message = '用户名不能为空';
		res.json(resData); //使用res.json的方法返回前端数据
		return;
	}
	//密码不能为空
	if(password == ''){
		resData.code = 2;
		resData.message = '密码不能为空';
		res.json(resData);
		return;
	}
	//两次密码不能不一样
	if(password != repassword){
		resData.code = 3;
		resData.message = '两次输入的密码不一致';
		res.json(resData);
		return;
	}
	//验证用户名是否已经注册,需要通过模型类查询数据库
	User.findOne({
		username:username
	}).then(function(userInfo ){
		// console.log(userInfo); //若控制台返回空表示没有查到数据
		if(userInfo){
			//若数据库有该记录
			resData.code = 4;
			resData.message = '用户名已被注册';
			res.json(resData);
			return;
		}
		//用户名没有被注册则将用户保存在数据库中
		var user = new User({
			username:username,
			password:password
		});//通过操作对象操作数据库
		return user.save();
	}).then(function(newUserInfo){
		resData.message = '注册成功';
		res.json(resData);
	});

})

module.exports = router;



注册成功后,查看数据库可以查到该用户的信息


在mongo数据库下的blog库中的users表中查到了两个注册信息,其中一个便是上面点击注册的信息。

2.注册前端提示

用户填写不合法的注册信息需要在页面给出对应的提示

在views/main/index.html的注册form表单添加子div用于显示提示信息

<div class="registerRemind"></div>

并在public/css/main.css为其设置样式:

.registerRemind {
    color: #f70000;
    text-align: center;
    font-size: 13px;
    margin-top: 10px;
}

进入public/js/index.js文件中设置返回信息处理

$(function(){
	var toLogin = $('a.toLogin'),
		toRegister = $('a.toRegister'),
		loginInfo = $('div.loginInfo'),
		registerInfo = $('div.registerInfo'),
		loginBtn = $('input.loginBtn'),
		registerBtn = $('input.registerBtn'),
		registerRemind = $('.registerRemind');
	toLogin.on('click',function(){
		registerInfo.hide();
		loginInfo.show();
	})
	toRegister.on('click',function(){
		loginInfo.hide();
		registerInfo.show();
	})
	loginBtn.on('click',function(){
		$.ajax({
			type:'post',
			url: '/api/user/register',
			data: {
				username:registerInfo.find('[name="username"]').val(),
				password:registerInfo.find('[name="pwd"]').val(),
				repassword:registerInfo.find('[name="rpwd"]').val()
			},
			dataType: 'json',
			success: function(res){
				registerRemind.html(res.message);//返回提示信息
				if(!res.code){
					console.log(res.code);
					//注册成功,1s后跳转到登录
					setTimeout(function(){
						registerInfo.hide();
						loginInfo.show();
					},1000);//这是1秒延迟跳转
				}
			}
		})
	})
})

将用户输入信息不合法将显示对应提示:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值