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和php实现图片访问实时处理
Jan 05 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 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生成静态页面详解
2006/12/05 PHP
PHP中数组合并的两种方法及区别介绍
2012/09/14 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
python多进程操作实例
2014/11/21 Python
Python中的各种装饰器详解
2015/04/11 Python
Python里disconnect UDP套接字的方法
2015/04/23 Python
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
python获取服务器响应cookie的实例
2018/12/28 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
python3 kubernetes api的使用示例
2021/01/12 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
网站编辑求职信
2013/10/17 职场文书
入团者的自我评价分享
2013/12/02 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python