前言:在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推送
目前能想到的就这么多,其实我现在都不知道服务端这些东西该怎么写,毕竟我只是个前端小菜鸟而已
如有不足之处,请指教,谢谢!