一,开篇分析
大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章,
我也介绍过"连接"中间件的使用以及“Mongodb”的用法,今天就结合这两个中间件,写个实际的例子,不断完善和重构,已达到
充分学习的目的。好了,废话不说了,直接进入主题。
二,需求分析
(1),用户注册,登录功能(没有涉及很复杂的交互场景,注册时会有用户判断是否已存在)。
(2),用户登录成功,进入笔记管理系统的后台(笔记模块的增删改查功能)。
(3),用户可以具有简单的权限划分(管理员,注册用户)。
(4),界面比较简单,以学习为主。
三,开始设计应用(第一部分)
(1),建立用户登录页面,代码如下:
复制代码代码如下:doctype html html标题BigBear记事本应用登录/title meta Content=' IE=8 ' http-equiv=' X-UA-Compatible '/meta http-equiv=' Content-Type ' Content=' text/html;charset=UTF-8 '样式类型=' text/CSS ' .注释-标题{边距-底部: 45px背景: # 6699ccfont-size : 14px字体粗细:加粗;color : # ffffont-family : arial;高度: 24px行高: 24px } a { color : # 336699 font-family : arial;字号: 14px字体粗细:加粗;}/style脚本src=' http : js/index。js '/脚本/头体div class=' note-title ' bigbar记事本应用登录/div表单操作='/login '方法=“后”跨度用户名:/span put type=' text ' name=' name '/br/br/span密码:/span put type=' password ' name=' password '/input type=' submit ' value='登录/a href='reg.html '我要注册a/表单/正文/html
效果图:
(2),建立用户注册页面,代码如下:
复制代码代码如下:doctype html html标题BigBear记事本应用注册/title meta Content=' IE=8 ' http-equiv=' X-UA-Compatible '/meta http-equiv=' Content-Type ' Content=' text/html;charset=UTF-8 '样式类型=' text/CSS ' .注释-标题{边距-底部: 45px背景: # ff3300font-size : 14px字体粗细:加粗;color : # ffffont-family : arial;高度: 24px行高: 24px}/style脚本src=' http : js/index。js '/脚本/头体div class=' note-title ' bigbar记事本应用注册/div表单操作='/reg '方法=“后”跨度用户名:/span put type=' text ' name=' name '/br/br/span密码:/spaninput type=' password ' name=' password '/br/br/input type=' submit ' value='注册//表单/正文/html效果图:
(3),建立“Mongodb”连接代码,如下:
复制代码代码如下: var MongoDB=required(' MongoDB ');定义变量服务器=新mongodb .服务器(' localhost ',27017,{ auto _ reconnect : true });var conn=new mongodb .Db('bb ',服务器,{ safe : true });conn.open(函数(错误,db){ if(错误)抛出错误;console.info('mongodb已连接!') ;}) ;exports=module.exports=conn
(4),建立模型实体类"用户",如下:
复制代码代码如下:var conn=require('./conn ');函数用户(用户){这。名称=用户['名称'];this.password=用户['密码'];} ;User.prototype.save=函数(回调){ var=thisconn.collection('users ',{ safe : true },function(error,collection){ if(error)返回conn . close();collection.findOne({ //判断此用户是否存在name : that.name },函数(错误,用户){ if(错误)返回conn . close();if(!用户){集合。插入({ name :name ' ',password : that.password '' },{ safe : true },function(错误,用户){ if(错误)返回conn . close();回调回调(用户);conn . close();}) ;} else{ callback('用户已注册!') ;} }) ;}) ;} ;User.login=函数(名称、密码、回调){ conn.collection('users ',{ safe : true },function(错误、集合){ if(错误)返回conn . close();收藏。findone({ name : name,password : password }),function(error,user){ if(error)return conn . close();回调回调(用户);conn . close();}) ;}) ;} ;导出=模块。导出=用户;
效果图:
(5),建立应用程序“app”,如下:
复制代码代码如下://app。jsvar connect=require(' ./lib/connect ');var user=require(' ./models/user’);var app=连接。CreateServer();应用程序.使用(connect.logger('dev ').请使用(connect.query()).使用(connect.bodyParser()).使用(connect.cookieParser()).使用(连接。静态(_ dirname/' view ').请使用(连接。静态(_ dirname/' public ').使用('/login ',函数(请求,响应,下一步){ var name=request。正文[' name '];var密码=请求。正文['密码'];user.login(名称,密码,函数(用户){ if(用户){ response.end('欢迎使用: '用户['姓名'] ' ^_^.') ;} else{ response.end('User: '名称“不注册!”) ;} }) ;}).使用('/reg ',函数(请求,响应,下一步){ var name=request。正文[' name '];var密码=请求。正文['密码'];新用户({ name : name,password : password }).save(function(user){ if(user user [' name ']){ response。结束('用户: '名称'注册完成!') ;} else{ response.end('User: '名称'已注册!') ;} }) ;}).侦听(8888,函数(){ console.log('运行在端口- 8888上的网络服务器')) ;}) ;
说明一下:
(1)“连接。query()"-处理"得到"请求参数解析。
(2)“连接。body parser()"-处理《邮报》请求参数解析。
(3)“连接。静态(_ dirname/' view ')、连接。静态(_ dirname/' public ')
分别代表模板视图" html "以及静态资源如js、css、jpg、gif的资源目录。
以下是这个应用的目录结构:
四,总结一下
(1),掌握NodeJs操作数据库的基本操作语句。
(2),划分层级,如模型,视图,路由。
(3),不断优化和修改本文的例子(比如注册验证用户是否存在,可以独立出"用户管理器"做一层代理完成用户验证和保存的动作)。
(4),明天继续完成后续的功能,尽请期待。