NodeJS博客实战09_用户登录的实现

用户登录与用户注册功能类似,都是将获取的数据发送给后端进行合法性判断,然后在执行数据库操作

前端使用ajax将获取的登录信息发送给后端;

将返回的信息展示在前端页面上,若登录成功,展示出欢迎面板,并附上用户名和隐藏登录面板;

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'),
		loginRemind = $('.loginRemind'),
		showInfo = $('.showInfo');
	toLogin.on('click',function(){
		registerInfo.hide();
		loginInfo.show();
	})
	toRegister.on('click',function(){
		loginInfo.hide();
		registerInfo.show();
	})
	//注册
	registerBtn.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){
					setTimeout(function(){
						registerInfo.hide();
						loginInfo.show();
					},1000);//这是1秒延迟跳转
				}
			}
		})
	})
	//登录
	loginBtn.on('click',function(){
		$.ajax({
			type: 'post',
			url: '/api/user/login',
			data: {
				username:loginInfo.find('[name="user2"]').val(),
				password:loginInfo.find('[name="pwd2"]').val()
			},
			dataType: 'json',
			success: function(res){
				loginRemind.html(res.message);//返回提示信息
				if(!res.code){
					setTimeout(function(){
						loginInfo.hide();
						showInfo.show();
						showInfo.find('.name').html(res.userInfo.username);
						showInfo.find('.info').html('你好,欢迎光临我的博客');
					},1000);//这是1秒延迟跳转
				}
			}
		})
	})
})

在后端api.js接受并处理用户登录数据,若用户名或者密码不为空,则将用户名和密码在数据库中进行匹配,匹配成功则返回用户信息;

同样使用moogoose的模型类findOne方法查询数据库:

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);
	});

})

router.post('/user/login',function(req,res){
	var username = req.body.username;
	var password = req.body.password;
	if(username == '' || password == ''){
		resData.code = 1;
		resData.message = '用户名或密码不能为空';
		res.json(resData);
		return;
	}
	//查询数据库验证用户名和密码
	User.findOne({
		username: username,
		password: password
	}).then(function(userInfo){
		if(!userInfo){
			resData.code = 2;
			resData.message = '用户名或密码错误';
			res.json(resData);
			return;
		}
		//验证通过则登录
		resData.message = '登录成功';
		resData.userInfo = {
			_id: userInfo._id,
			username: userInfo.username
		};
		res.json(resData);
		return;
	})
})

module.exports = router;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值