源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-10-30 14:41 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:NodeJS学习笔记之Connect中间件应用实例
[b]一,开篇分析[/b] 大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章, 我也介绍过“Connect”中间件的使用以及“Mongodb”的用法,今天就结合这两个中间件,写个实际的例子,不断完善和重构,已达到 充分学习的目的。好了,废话不说了,直接进入主题。 [b]二,需求分析[/b] (1),用户注册,登录功能(没有涉及很复杂的交互场景,注册时会有用户判断是否已存在)。 (2),用户登录成功,进入笔记管理系统的后台(笔记模块的增删改查功能)。 (3),用户可以具有简单的权限划分(管理员,注册用户)。 (4),界面比较简单,以学习为主。 [b]三,开始设计应用(第一部分)[/b] (1),建立用户登录页面,代码如下:
[url=reg.html]             </form>     </body> </html>
  效果图: [img]http://files.jb51.net/file_images/article/201501/2015012715541242.png[/img] (2),建立用户注册页面,代码如下:   效果图: [img]http://files.jb51.net/file_images/article/201501/2015012715541243.png[/img] (3),建立“Mongodb”连接代码,如下:
[u]复制代码[/u] 代码如下:
 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”,如下:
[u]复制代码[/u] 代码如下:
 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 ;
  效果图: [img]http://files.jb51.net/file_images/article/201501/2015012715541244.png[/img] (5),建立应用程序“app”,如下:
[u]复制代码[/u] 代码如下:
 // 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”的资源目录。      以下是这个应用的目录结构: [img]http://files.jb51.net/file_images/article/201501/2015012715541245.png[/img] 四,总结一下   (1),掌握NodeJs操作数据库的基本操作语句。   (2),划分层级,如模型,视图,路由。   (3),不断优化和修改本文的例子(比如注册验证用户是否存在,可以独立出“UserManager”做一层代理完成用户验证和保存的动作)。   (4),明天继续完成后续的功能,尽请期待。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部