用户注册
UserSchema结构设计
数据库安装
参考:MongoDB下载安装
启动服务
mongod --dbpath=E:\NodeJS\Blog\db --port=27017
连接数据库
app.js
//加载数据库模块
var mongoose = require('mongoose');
/.../
//链接数据库
mongoose.connect('mongodb://localhost:27017/blog',function (err) {
if(err){
console.log('数据连接失败');
}else{
console.log('数据连接成功');
//监听http请求
app.listen(8080);
}
});
定义用户表结构
/schemas/users.js
var mongoose = require('mongoose');
//用户数据结构
module.exports = new mongoose.Schema({
//用户名
username:String,
//密码
password:String
});
定义用户表操作模型
/models/User.js
var mongoose = require('mongoose');
var userSchema = require('../schemas/users');
module.exports = mongoose.model('User',userSchema);
注册模块
注册页面
注册逻辑
使用ajax方式实现注册
/public/js/index.js
//注册
$registerBox.find('button').on('click', function() {
//通过ajax提交请求
$.ajax({
type: 'post',
url: '/api/user/register',
data: {
username: $registerBox.find('[name="username"]').val(),
password: $registerBox.find('[name="password"]').val(),
repassword: $registerBox.find('[name="repassword"]').val()
},
dataType: 'json',
success: function(result) {
$registerBox.find('.colWarning').html(result.message);
if (!result.code) {
//注册成功
setTimeout(function() {
$loginBox.show();
$registerBox.hide();
}, 1000);
}
}
});
});
api接口编写
app.js
//加载bodyParse用来处理post提交过来的数据
var bodyParser = require('body-parser');
/.../
//bodyParser设置
app.use(bodyParser.urlencoded({extended:true}));
/routers/api.js
var express = require('express');
var router = express.Router();
var User = require('../models/User');
//统一返回格式
var responseData;
router.use(function(req,res,next) {
responseData={
code:0,
message:''
}
next();
});
/**
* 用户注册
* 注册逻辑
* 1.用户不能为空
* 数据库查询
* 2.密码不能为空
* 3.两次密码一致
*/
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==''){
responseData.code = 1;
responseData.message = '用户名不能为空';
res.json(responseData);
return;
}
//密码不能为空
if(password==''){
responseData.code = 2;
responseData.message = '密码不能为空';
res.json(responseData);
return;
}
//密码不一致
if(password!=repassword){
responseData.code = 3;
responseData.message = '两次密码不一致';
res.json(responseData);
return;
}
//用户名是否被注册
User.findOne({
username:username
}).then(function (useInfo) {
if(useInfo){
//数据库中有该记录
responseData.code = 4;
responseData.message = '该用户名已存在';
res.json(responseData);
return;
}
//保存用户信息
var user = new User({
username:username,
password:password
});
return user.save();
}).then(function (newUserInfo) {
responseData.message = '注册成功';
res.json(responseData);
});
});
module.exports = router;
登录模块
/public/js/index.js
//登录
$loginBox.find('button').on('click', function() {
//通过ajax提交请求
$.ajax({
type: 'post',
url: '/api/user/login',
data: {
username: $loginBox.find('[name="username"]').val(),
password: $loginBox.find('[name="password"]').val()
},
dataType: 'json',
success: function(result) {
$loginBox.find('.colWarning').html(result.message);
if (!result.code) {
//登录成功
window.location.reload();
}
}
})
}
/routers/api.js
/**
* 登录
*/
router.post('/user/login',function (req,res) {
var username = req.body.username;
var password = req.body.username;
if(username==''||password==''){
responseData.code = 1;
responseData.message = '用户名或密码不能为空';
res.json(responseData);
return;
}
//查询数据库
User.findOne({
username:username,
password:password
}).then(function (userInfo) {
if(!userInfo){
responseData.code = 2;
responseData.message = '用户名或密码错误';
res.json(responseData);
return;
}
//登陆成功
responseData.message = '登录成功';
responseData.userInfo = {
_id:userInfo._id,
username:userInfo.username
};
res.json(responseData);
return;
});
});