您的位置:首页 > 数据库

nodejs自学之旅(3)—— 使用模型对象操作数据库实现简单的注册和登录

2018-02-07 17:13 771 查看
上一章的模型创建完之后还没使用过,这一章来简单说明如何通过操作对象的方法操作数据库。

先随便搞个页面出来,样式什么的无所谓



给注册和登录按钮,绑定具体的ajax事件

$("#registor-button").bind("click",function(){
$.ajax({
type:"post",
url:"/api/user/registor",
data:{
username:$("#registor-username").val(),
password:$("#registor-password").val(),
},
success:function(res){
console.log(res);
console.log(res.err_code);
}
})
})
$("#login-button").bind("click",function(){
$.ajax({
type:"post",
url:"/api/user/login",
data:{
username:$("#registor-username").val(),
password:$("#registor-password").val(),
},
success:function(res){
console.log(res);
console.log(res.err_code);
}
})
})

之前在划分模块的时候,分了三个模块,分别是
//划分模块
app.use('/admin', require('./routers/admin')); //后台管理员
app.use('/api', require('./routers/api')); //接口
app.use('/', require('./routers/main')); //面向用户所以有关接口的,都会在接口文件(api.js)里面管理代码,首先是统一接口的返回数据格式,一般都是json格式的数据,如下所示,在这里使用了router.use()方法是为了在用户每次调用接口(访问路由)的时候,初始化数据。在api.js里面需要引入之前写好的user模型,通过User对象来操作数据库。注:model对象里包含了很多常用方法,不需要写具体的增删改查。
var express = require('express');
var router = express.Router();

//统一返回格式
var responseData;
//这个方法在每次用户访问的时候都会重置数据
router.use(function(req,res,next){
responseData={
err_code:0,
err_msg:'success',
}
next();//next是执行下一个路由匹配的绑定函数。
})

//引入user模型,通过对象操作数据库
var User = require('../models/mUsers');

module.exports = router;引入model后就可以具体操作了,在具体操作前,先引入一个插件,该插件用于解析前端发送的请求(req)参数。这个插件可以放在公共启动文件里(app.js)
//加载body-parse
var bodyParse = require("body-parser");
//body-parser设置
app.use(bodyParse.urlencoded({extended:true}));如果不使用上述插件,可能会使req.body解析出问题。引入插件后,即可对前端发送过来的请求进行解析,并分为两种方式去处理,第一种是可以直接判断的,如参数错误,用户名密码为空等问题,第二种是需要查询数据库的。查询数据库则需要用到User对象里的一些方法,具体方法请查阅官方文档。这里只用到了findOne和save方法,注意这两种方法是不同的,前者是私有方法,后者需要new一个实例。

/*用户注册
* 基本验证:
* 1.用户名密码不为空
* 2.用户名重复(有关数据库查询)
* 3.密码少于6位
* 4.参数错误
* .......
* */
router.post('/user/registor',function(req,res,next){
var reqdata = req.body;
var username = reqdata.username;
var password = reqdata.password;
if(typeof(username) == "undefined" || typeof(password) == "undefined"){
responseData.err_code = 1;
responseData.err_msg = "参数错误";
res.json(responseData);
return;
}
if(username == '' || password == ''){
responseData.err_code = 2;
responseData.err_msg = "用户名或密码不能为空";
res.json(responseData);
return;
}
if(password.length < 6 ){
responseData.err_code = 10;
responseData.err_msg = "密码不能小于六位";
res.json(responseData);
return;
}
//User.findOne方法返回一个promise对象
User.findOne({
username:username
}).then(function(userInfo){
if(userInfo){
//表示数据库中有该记录
responseData.err_code =9;
responseData.err_msg = "用户名已经被注册";
res.json(responseData);
return;
}
var user = new User({
username:username,
password:password
});
return user.save();
}).then(function(newUserInfo){
if(typeof(newUserInfo)!="undefined")
{
responseData.err_msg = "注册成功";
res.json(responseData);
}
})
})
登录方法同上,附上源码
var express = require('express');
var router = express.Router();

//统一返回格式
var responseData;
//这个方法在每次用户访问的时候都会重置数据
router.use(function(req,res,next){
responseData={
err_code:0,
err_msg:'success',
}
next();//next是执行下一个路由匹配的绑定函数。
})

//引入user模型,通过对象操作数据库
var User = require('../models/mUsers');

/*用户注册 * 基本验证: * 1.用户名密码不为空 * 2.用户名重复(有关数据库查询) * 3.密码少于6位 * 4.参数错误 * ....... * */ router.post('/user/registor',function(req,res,next){ var reqdata = req.body; var username = reqdata.username; var password = reqdata.password; if(typeof(username) == "undefined" || typeof(password) == "undefined"){ responseData.err_code = 1; responseData.err_msg = "参数错误"; res.json(responseData); return; } if(username == '' || password == ''){ responseData.err_code = 2; responseData.err_msg = "用户名或密码不能为空"; res.json(responseData); return; } if(password.length < 6 ){ responseData.err_code = 10; responseData.err_msg = "密码不能小于六位"; res.json(responseData); return; } //User.findOne方法返回一个promise对象 User.findOne({ username:username }).then(function(userInfo){ if(userInfo){ //表示数据库中有该记录 responseData.err_code =9; responseData.err_msg = "用户名已经被注册"; res.json(responseData); return; } var user = new User({ username:username, password:password }); return user.save(); }).then(function(newUserInfo){ if(typeof(newUserInfo)!="undefined") { responseData.err_msg = "注册成功"; res.json(responseData); } }) })

/*用户登录
* 基本验证:
* 1.用户名密码不为空
* 2.参数错误
* 3.用户名密码错误
* */
router.post('/user/login',function(req,res,next){
var reqdata = req.body;
var username = reqdata.username;
var password = reqdata.password;
if(typeof(username) == "undefined" || typeof(password) == "undefined"){
responseData.err_code = 1;
responseData.err_msg = "参数错误";
res.json(responseData);
return;
}
if(username == '' || password == ''){
responseData.err_code = 2;
responseData.err_msg = "用户名或密码不能为空";
res.json(responseData);
return;
}
User.findOne({
username:username,
password:password
}).then(function(userInfo){
if(!userInfo){
responseData.err_code = 3;
responseData.msg = "用户名密码错误";
res.json(responseData);
return;
}
responseData.err_msg="登录成功";
res.json(respon
4000
seData);
return;
})

})

module.exports = router;

最后检验一下,能注册也能登录



数据库里添加了实际的数据。



下一章会对本章进行细化

使用cookie存储实现登录

分角色登录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐