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获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
Nodejs 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
详解nodejs 文本操作模块-fs模块(一)
Dec 22 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
Mar 28 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
nodejs之koa2请求示例(GET,POST)
Aug 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基于工厂模式实现的计算器实例
2015/07/16 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
PHP chop()函数讲解
2019/02/11 PHP
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
js DOM的学习笔记
2011/12/22 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
python类型强制转换long to int的代码
2013/02/10 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
python常见数制转换实例分析
2015/05/09 Python
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
python编程实现归并排序
2017/04/14 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
Python try except finally资源回收的实现
2021/01/25 Python
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
二手房购房意向书
2015/05/09 职场文书
亮剑观后感500字
2015/06/05 职场文书
毕业设计工作总结
2015/08/14 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python