• Node.js基础学习四之注册功能


    前言:在Node.js学习(二)和(三)中介绍了如何在Node.js 中获取登录的用户名和密码与数据库进行验证并返回数据给客户端

    需求:实现注册功能

    为了区分登录和注册是两个不同的请求,在端口后面加上/login表示登录,/register表示注册,交给后台处理

    前端代码还是和之前的一样,控制好请求的URL即可

    Node.js 服务端代码如下:

    1、监听端口的node-post.js(Controller层)

    /**
     * Created by LB on 2017/10/27.
     */
    var http = require('http');
    var url = require('url');
    // 路由
    var Router = require('./node-router');
    
    
    http.createServer(function (req, res) {
        var parms = url.parse(req.url,true);
        console.log(parms);
    
        var router = new Router(parms);
        router.loginOrRegister(function (result) {
            console.log("最终回调:" + result.msg);
            res.writeHead(200,{'Content-type':'text/plain;charset=utf-8'});
            res.end('callback('+JSON.stringify(result)+')');
        });
    
    }).listen(8082);

    这里多了一个路由的概念,目前我的项目中并没有很好的运用它,请不要在意,这个js代码有点像Java服务端开发中的Control层,接收客户端请求并获取参数交给服务层处理,将服务层回调的数据传递给客户端

    2、逻辑处理层 node-router.js(Server层)

    // 获取user模块
    var User = require('./model-user');
    // 获取CURD模块
    var CURD = require('./node-sql');
    // 构造
    var curd = new CURD();
    
    var Router = function (parms) {
        this.pathname = parms.pathname;
        this.user = new User(null,parms.query.userName,parms.query.userPsw);
    };
    
    Router.prototype.loginOrRegister = function (callback) {
        var user = this.user;
        if(this.pathname == "/login"){
            console.log("登录验证请求");
            curd.check(user, function (result) {
                callback(result);
            });
        }else if (this.pathname == "/register"){
            console.log("注册请求");
            curd.check(user, function (res1) {
                if (res1.status != 200) {
                    curd.add(user,function (res2) { // 这里不能用 this.user,此时this并不指向 Router
                        callback(res2);
                    })
                }else {
                    res1.msg = "该用户名已存在,请重新输入";
                    callback(res1);
                }
            });
        }
    };
    
    module.exports = Router;

    主要做的事有,构造User实例,判断URL如果是登录则调用check() ,如果是注册则先调用check() 判断能否注册,能注册在调用add()新增

    3、数据node-sql.js(Dao层)

    //
    CURD.prototype.add = function(obj,callback){
        sql = " INSERT INTO user VALUES(?,?,?)";
        console.log("---" +obj.getUserName()+ "---" +obj.getUserPsw());
        var addParams = [obj.getId(),obj.getUserName(),obj.getUserPsw()];
        connection.query(sql,addParams, function (error,result) {
            if (error){
                console.log("[INSERT ERROR] - ",error.message);
                return;
            }
            console.log("----------------------------INSERT----------------------------");
            console.log("INSERT ID:" + result.insertId);
            console.log(JSON.stringify(result));
            console.log("--------------------------------------------------------------
    
    ");
    
            if(result.insertId) {
                resData.status = 200;
                resData.msg = "注册成功!";
            }else {
                resData.status = 203;
                resData.msg = "注册失败!"
            }
            callback(resData);
        })
    };
    //
    CURD.prototype.check = function(obj,callback){
        sql = "SELECT COUNT(*) FROM `user` AS u where u.userName =  ? AND u.userPsw = ?";
        console.log(obj.getUserName() + "====" + obj.getUserPsw());
        var addParams = [obj.getUserName(),obj.getUserPsw()];
        if(obj){
            connection.query(sql,addParams, function (error, result) {
                if(error){
                    console.log("[SELECT ERROR] - ",error.message);
                    return;
                }
                console.log("----------------------------SELECT----------------------------");
                console.log(result);
                console.log(result[0]);
                console.log(result[0]["COUNT(*)"]);
                console.log("--------------------------------------------------------------
    
    ");
                if (result[0]["COUNT(*)"] == 0){
                    resData.status = 203;
                    resData.msg = "用户名或密码有误";
                }else{
                    resData.status = 200;
                    resData.msg = "验证成功";
                }
                resData.data = {
                    count:result[0]["COUNT(*)"]
                };
                callback(resData);
            });
    
        }else{
            // 返回所有对象
        }
    };

    这里需要主要就给出新增和查询两个,以及回调的数据格式,我是按照我们公司的文档规定来写的.

    目前为止基础篇就这么多了,→ 点击源码下载

    所以从下一篇开始,我会按照以下路线来学习探索

    1、Express 框架重写登录注册,(这里并不介绍Express框架,请参考其他文献)

    2、表格数据、分页、带条件搜索

    3、表格数据的导入导出

    4、上传大头贴

    5、webSocket推送

    目前能想到的就这么多,其实我现在都不知道服务端这些东西该怎么写,毕竟我只是个前端小菜鸟而已

    如有不足之处,请指教,谢谢!

  • 相关阅读:
    php二维数组排序
    重学C语言 -- printf,scanf
    php调试利器 -- xdebug
    composer php依赖管理工具
    现代php开发
    php新特性--持续更新
    2016年书单
    jenkins集成gitlab实现自动合并
    etcd安装
    nginx 日志切割
  • 原文地址:https://www.cnblogs.com/linwen5723/p/7754414.html
Copyright © 2020-2023  润新知