NodeJS学习笔记之Connect中间件应用实例


Posted in NodeJs onJanuary 27, 2015

一,开篇分析

大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章,

我也介绍过“Connect”中间件的使用以及“Mongodb”的用法,今天就结合这两个中间件,写个实际的例子,不断完善和重构,已达到

充分学习的目的。好了,废话不说了,直接进入主题。

二,需求分析

(1),用户注册,登录功能(没有涉及很复杂的交互场景,注册时会有用户判断是否已存在)。

(2),用户登录成功,进入笔记管理系统的后台(笔记模块的增删改查功能)。

(3),用户可以具有简单的权限划分(管理员,注册用户)。

(4),界面比较简单,以学习为主。

三,开始设计应用(第一部分)

(1),建立用户登录页面,代码如下:

<!doctype html>

<html>

    <head>

        <title>Bigbear记事本应用登录</title>

        <meta content="IE=8" http-equiv="X-UA-Compatible"/>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <style type="text/css">

            .note-title {

                margin-bottom : 45px ;

                background : #6699cc ;

                font-size : 14px ;

                font-weight : bold ;

                color : #fff;

                font-family:arial ;

                height : 24px ;

                line-height : 24px ;

            }

            a {

                color : #336699;

                font-family:arial ;

                font-size : 14px ;

                font-weight : bold ;

            }

        </style>

        <script src="js/index.js"></script>

    </head>

    <body>

        <div class="note-title">Bigbear记事本应用登录</div>

            <form action="/login" method="post">

                <span>用户名:</span><input type="text" name="name" /><br/><br/>

                <span>密  码:</span><input type="password" name="password" />

                <input type="submit" value="登录" />

                <a href="reg.html">我要注册</a>

            </form>

    </body>

</html>

效果图:

NodeJS学习笔记之Connect中间件应用实例

(2),建立用户注册页面,代码如下:

 <!doctype html>

 <html>

     <head>

         <title>Bigbear记事本应用注册</title>

         <meta content="IE=8" http-equiv="X-UA-Compatible"/>

         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

         <style type="text/css">

             .note-title {

                 margin-bottom : 45px ;

                 background : #ff3300 ;

                 font-size : 14px ;

                 font-weight : bold ;

                 color : #fff;

                 font-family:arial ;

                 height : 24px ;

                 line-height : 24px ;

             }

         </style>

         <script src="js/index.js"></script>

     </head>

     <body>

         <div class="note-title">Bigbear记事本应用注册</div>

             <form action="/reg" method="post">

                 <span>用户名:</span><input type="text" name="name" /><br/><br/>

                 <span>密  码:</span><input type="password" name="password" /><br/><br/>

                 <input type="submit" value="注册" />

             </form>

     </body>

 </html>

效果图:

NodeJS学习笔记之Connect中间件应用实例

(3),建立“Mongodb”连接代码,如下:

 var mongodb = require("mongodb") ;

 var server = new mongodb.Server("localhost",27017,{

     auto_reconnect : true

 }) ;

 var conn = new mongodb.Db("bb",server,{

     safe : true

 }) ;

 conn.open(function(error,db){

     if(error) throw error ;

     console.info("mongodb connected !") ;

 }) ;

 exports = module.exports = conn ;

(4),建立模型实体类“User”,如下:

 var conn = require("../conn") ;

 function User(user){

     this.name = user["name"] ;

     this.password = user["password"] ;

 } ;

 User.prototype.save = function(callback){

     var that = this ;

     conn.collection("users",{

         safe : true

     },function(error,collection){

         if(error) return conn.close() ;

         collection.findOne({   // 判断此用户是否存在

             name : that.name

         },function(error,user){

             if(error) return conn.close() ;

             if(!user){

                 collection.insert({

                     name : that.name + "" ,

                     password : that.password + ""

                 },{

                     safe : true

                 },function(error,user){

                     if(error) return conn.close() ;

                     callback && callback(user) ;

                     conn.close() ;

                 }) ;        

             }

             else{

                 callback("User has registed !") ;

             }

         }) ; 

     }) ;

 } ;

 User.login = function(name,password,callback){

     conn.collection("users",{

         safe : true

     },function(error,collection){

         if(error) return conn.close() ;

         collection.findOne({

             name : name ,

             password : password

         },function(error,user){

             if(error) return conn.close() ;

             callback && callback(user) ;

             conn.close() ;

         }) ; 

     }) ;

 } ;

 exports = module.exports = User ;

效果图:

NodeJS学习笔记之Connect中间件应用实例

(5),建立应用程序“app”,如下:

 // app.js

 var connect = require("./lib/connect") ;

 var user = require("./models/user") ;

 var app = connect.createServer() ;

 app .use(connect.logger("dev"))

 .use(connect.query())

 .use(connect.bodyParser())

 .use(connect.cookieParser())

 .use(connect.static(__dirname + "/views"))

 .use(connect.static(__dirname + "/public"))

 .use("/login",function(request,response,next){

     var name = request.body["name"] ;

     var password = request.body["password"] ;

     user.login(name,password,function(user){

         if(user){

             response.end("Welcome to:" + user["name"] + " ^_^ ... ...") ;    

         }

         else{

             response.end("User:" + name + " Not Register !")    ;

         }

     }) ;

 })

 .use("/reg",function(request,response,next){

     var name = request.body["name"] ;

     var password = request.body["password"] ;

     new user({

         name : name ,

         password : password

     }).save(function(user){

         if(user && user["name"]){

         response.end("User:" + name + "Register Done !")    ;    

         }

         else{

         
response.end("User: " + name + "has registed !") ;  

         }

     }) ;

 })

 .listen(8888,function(){

     console.log("Web Server Running On Port ---> 8888 .") ;

 }) ;

说明一下:

(1)“connect.query()”------处理“Get”请求参数解析。

(2)“connect.bodyParser()”------处理“Post”请求参数解析。

(3)“connect.static(__dirname + "/views"),connect.static(__dirname + "/public")”

 分别代表模板视图“html”以及静态资源如“js,css,jpg,gif”的资源目录。

 以下是这个应用的目录结构:

NodeJS学习笔记之Connect中间件应用实例

四,总结一下

(1),掌握NodeJs操作数据库的基本操作语句。

(2),划分层级,如模型,视图,路由。

(3),不断优化和修改本文的例子(比如注册验证用户是否存在,可以独立出“UserManager”做一层代理完成用户验证和保存的动作)。

(4),明天继续完成后续的功能,尽请期待。

NodeJs 相关文章推荐
基于NodeJS的前后端分离的思考与实践(五)多终端适配
Sep 26 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
nodejs redis 发布订阅机制封装实现方法及实例代码
Dec 15 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
Nodejs调用Dll模块的方法
Sep 17 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
nodejs 使用 js 模块的方法实例详解
Dec 04 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 #NodeJs
NodeJS学习笔记之Connect中间件模块(一)
Jan 27 #NodeJs
nodejs批量修改文件编码格式
Jan 22 #NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 #NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 #NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 #NodeJs
NodeJS学习笔记之Http模块
Jan 13 #NodeJs
You might like
PHP中Session的概念
2006/10/09 PHP
PHP4 与 MySQL 交互使用
2006/10/09 PHP
php生成图片缩略图的方法
2015/04/07 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
js a标签点击事件
2017/03/30 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
2018/07/04 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
Python实现GUI学生信息管理系统
2020/04/05 Python
TensorFlow变量管理详解
2018/03/10 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
pandas分组聚合详解
2020/04/10 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
葡萄牙语专业个人求职信
2013/12/10 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
人事经理岗位职责
2014/04/28 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS