nodejs基础教程-简单blog(4)-用户信息验证与储存

26 篇文章 0 订阅
21 篇文章 0 订阅

Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架:从本质上来说,一个 Express 应用就是在调用各种中间件。

继续上节的教程;
添加中间件body-parser,用来处理post提交过来的数据;
在app.js中加入

var bodyParser=require('body-parser');
/**
 * //bodyParser配置
 *  返回一个只解析urlencoded消息体的中间件,
 *
 *  urlencoded:url编码,只接受utf-8对消息体进行编码,
 *  在前台返回的req对象添加一个新属性body,同时支持自动的gzip/deflate编码解析过的消息放在req.body对象中,
 *  这个对象包含的键值对
 *  当extended设置为true,是任何类型
 *  当extended为false的时候,是string或者一个数组。
 *  extended:如果设置为false,那么对URL-encoded的数据的解析采用querystring库,如果设置为true那么采用qs
 */
app.use(bodyParser.urlencoded({extended:true}))

在api中改写代码;

/**
 * 用户注册
 * 
 * router.post:
 * //处理任何以"/user/register"结束的请求
 */
router.post('/user/register',function (req,res,next) {
    console.log(req.body)

});
在页面上点击注册。 后台将会console 返回;{ username: '', password: '' }

这里写图片描述

注册要做的事情
这里写图片描述

设置一个统一的返回给前端的中间件

//统一返回方式;
var resoinseData;
/**
 * router.use([path],function)
 * 当前路由将会使用此中间件
 */
//
router.use(function (req,res,next) {
    resoinseData={
        code:0,
        message:''
    }
    next();
})
/**
 * 用户注册
 * 1,用户名是否存在;数据库查询;
 * router.post:
 * 处理任何以"/user/register"结束的请求

 */
router.post('/user/register',function (req,res,next) {
    console.log(req.body)
    var username=req.body.username;
    var password=req.body.password;
    if(username==''||password==''){
        resoinseData.code=1
        resoinseData.message='用户名或密码不能为空!'
        res.json(resoinseData);//json格式返回给前端;
        return
    }else{
        res.json(resoinseData)
    }
});

用户点击注册
这里写图片描述

这里写图片描述

操作数据库,查询用户名是否被注册,
/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');
//数据库会自动把User生成为Users
module.exports=mongoose.model('User',userSchema);//新建名为User的数据库表

api.js中写入

var User=require('../models/User')
router.post('/user/register',function (req,res,next) {
    console.log(req.body)
    var username=req.body.username;
    var password=req.body.password;
    if(username==''||password==''){
        resoinseData.code=1
        resoinseData.message='用户名或密码不能为空!'
        res.json(resoinseData);//json格式返回给前端;
        return
    }
    //findOne 查询是否存在用户名。如果存在说明用户已被注册
    User.findOne({
        username:username
    }).then(function (userInfo) {
        console.log(userInfo,"userInfo");
        if(userInfo){
            resoinseData.code=2
            resoinseData.message='用户名已被注册!'
             res.json(resoinseData);
             return
        }
            //保存数据;
            var user=new User(req.body);
           return user.save();

    }).then(function (newUserInfo) {
        console.log(newUserInfo,"newUserInfo");
        resoinseData.message='操作成功!'
        res.json(resoinseData)
    })


});

前端index.html中 ,注册请求改为:

 register: function () {
                if(this.pwd==''||this.pwd2==''){
                    alert("用户名或密码不能为空")
                    return;
                }
                if(this.pwd!=this.pwd2){
                    alert("密码不一致!")
                    this.pwd=this.pwd2=''
                    return;
                }

                this.page = 1;
                $.ajax({
                    type: 'post',
                    url: "/api/user/register",
                    data: {username: this.username, password: this.pwd},
                    dataType:'json',
                    success: function (result) {
                        if(result.code==200){
                            console.log(result)
                            vm.page = 0;
                            alert(result.message)
                        }else{
                            alert(result.message)
                        }

                    }
                });
            }

数据库:
这里写图片描述

后台
这里写图片描述

同理,登录也是如此操作:
api.js中

router.post('/user/login',function (req,res,next) {
    console.log(req.body)
    var username=req.body.username;
    var password=req.body.password;
    if(username==''||password==''){
        resoinseData.code=1
        resoinseData.message='用户名或密码不能为空!'
        res.json(resoinseData);//json格式返回给前端;
        return
    }
    //findOne 查询是否存在用户名。如果存在说明用户已被注册
    User.findOne({
        username:username,
        password:password
    }).then(function (userInfo) {
        console.log(userInfo,"userInfo");
        if(!userInfo){
            resoinseData.code=2
            resoinseData.message='用户名或密码错误'
            res.json(resoinseData)
        }else{
            resoinseData.code=200
            resoinseData.message='操作成功!'
            res.json(resoinseData)
        }
    })
});

index.html

 login: function () {
                $.ajax({
                    type: 'post',
                    url: "/api/user/login",
                    dataType:'json',
                    data: {username: this.username, password: this.pwd},
                    success: function (result) {

                        if(result.code==200){
                            console.log(result)
                            vm.page = 2;
                            alert(result.message)
                        }else{
                            alert(result.message)
                        }
                    }
                });
            },

在实际的开发过程中。密码都需要加密后再传给后台。这里就不一一解了。常见的有sha1或md5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值