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 相关文章推荐
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
nodejs集成sqlite使用示例
Jun 05 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
nodejs实现的连接MySQL数据库功能示例
Jan 25 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
详解NodeJs项目 CentOs linux服务器线上部署
Sep 16 NodeJs
Nodejs实现微信分账的示例代码
Jan 19 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
php遍历目录viewDir函数
2009/12/15 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
php中使用GD库做验证码
2016/03/31 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Django中FilePathField字段的用法
2020/05/21 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
.net面试题
2015/12/22 面试题
EJB面试题
2015/07/28 面试题
刘胡兰的英雄事迹材料
2014/02/11 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
给朋友的道歉短信
2015/05/12 职场文书
羊脂球读书笔记
2015/06/30 职场文书
微信小程序实现录音Record功能
2021/05/09 Javascript
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android