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("--------------------------------------------------------------\n\n");

        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("--------------------------------------------------------------\n\n");
            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推送

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

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

posted @ 2017-10-30 14:41  임문  阅读(217)  评论(0编辑  收藏  举报