NodeJS实战 利用Express&MongoDB搭建博客(3)登录注册

本文详细介绍了一个基于MongoDB的用户注册与登录系统的实现过程,包括数据库安装、连接配置、用户表结构设计、注册与登录逻辑处理及API接口编写。

用户注册

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值