最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJS學(xué)習(xí)筆記之Connect中間件應(yīng)用實(shí)例

 更新時(shí)間:2015年01月27日 16:03:35   投稿:hebedich  
前面我們介紹了幾篇內(nèi)容的connect中間件的基礎(chǔ)知識(shí),今天我們來(lái)實(shí)例應(yīng)用一下,做個(gè)記事本的小應(yīng)用,希望大家能夠喜歡。

一,開(kāi)篇分析

大家好哦,大熊君又來(lái)了,昨天因?yàn)橛悬c(diǎn)個(gè)人的事沒(méi)有寫(xiě)博客,今天又出來(lái)了一篇,這篇主要是寫(xiě)一個(gè)記事本的小應(yīng)用,前面的文章,

我也介紹過(guò)“Connect”中間件的使用以及“Mongodb”的用法,今天就結(jié)合這兩個(gè)中間件,寫(xiě)個(gè)實(shí)際的例子,不斷完善和重構(gòu),已達(dá)到

充分學(xué)習(xí)的目的。好了,廢話(huà)不說(shuō)了,直接進(jìn)入主題。

二,需求分析

(1),用戶(hù)注冊(cè),登錄功能(沒(méi)有涉及很復(fù)雜的交互場(chǎng)景,注冊(cè)時(shí)會(huì)有用戶(hù)判斷是否已存在)。

(2),用戶(hù)登錄成功,進(jìn)入筆記管理系統(tǒng)的后臺(tái)(筆記模塊的增刪改查功能)。

(3),用戶(hù)可以具有簡(jiǎn)單的權(quán)限劃分(管理員,注冊(cè)用戶(hù))。

(4),界面比較簡(jiǎn)單,以學(xué)習(xí)為主。

三,開(kāi)始設(shè)計(jì)應(yīng)用(第一部分)

(1),建立用戶(hù)登錄頁(yè)面,代碼如下:

復(fù)制代碼 代碼如下:

<!doctype html>
<html>
    <head>
        <title>Bigbear記事本應(yīng)用登錄</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記事本應(yīng)用登錄</div>
            <form action="/login" method="post">
                <span>用戶(hù)名:</span><input type="text" name="name" /><br/><br/>
                <span>密&nbsp;&nbsp;碼:</span><input type="password" name="password" />
                <input type="submit" value="登錄" />
                <a href="reg.html">我要注冊(cè)</a>
            </form>
    </body>
</html>

  效果圖:

(2),建立用戶(hù)注冊(cè)頁(yè)面,代碼如下:

復(fù)制代碼 代碼如下:

 <!doctype html>
 <html>
     <head>
         <title>Bigbear記事本應(yīng)用注冊(cè)</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記事本應(yīng)用注冊(cè)</div>
             <form action="/reg" method="post">
                 <span>用戶(hù)名:</span><input type="text" name="name" /><br/><br/>
                 <span>密&nbsp;&nbsp;碼:</span><input type="password" name="password" /><br/><br/>
                 <input type="submit" value="注冊(cè)" />
             </form>
     </body>
 </html>

  效果圖:

(3),建立“Mongodb”連接代碼,如下:

復(fù)制代碼 代碼如下:

 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),建立模型實(shí)體類(lèi)“User”,如下:

復(fù)制代碼 代碼如下:

 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({   // 判斷此用戶(hù)是否存在
             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 ;

  效果圖:

(5),建立應(yīng)用程序“app”,如下:

復(fù)制代碼 代碼如下:

 // 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 .") ;
 }) ;

  說(shuō)明一下:

   ?。?)“connect.query()”------處理“Get”請(qǐng)求參數(shù)解析。

   ?。?)“connect.bodyParser()”------處理“Post”請(qǐng)求參數(shù)解析。

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

     分別代表模板視圖“html”以及靜態(tài)資源如“js,css,jpg,gif”的資源目錄。

     以下是這個(gè)應(yīng)用的目錄結(jié)構(gòu):

四,總結(jié)一下

 ?。?),掌握NodeJs操作數(shù)據(jù)庫(kù)的基本操作語(yǔ)句。

 ?。?),劃分層級(jí),如模型,視圖,路由。

 ?。?),不斷優(yōu)化和修改本文的例子(比如注冊(cè)驗(yàn)證用戶(hù)是否存在,可以獨(dú)立出“UserManager”做一層代理完成用戶(hù)驗(yàn)證和保存的動(dòng)作)。

 ?。?),明天繼續(xù)完成后續(xù)的功能,盡請(qǐng)期待。

相關(guān)文章

  • express.js中間件說(shuō)明詳解

    express.js中間件說(shuō)明詳解

    這篇文章主要介紹了express.js中間件說(shuō)明詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Node.js 實(shí)現(xiàn)遠(yuǎn)程桌面監(jiān)控的方法步驟

    Node.js 實(shí)現(xiàn)遠(yuǎn)程桌面監(jiān)控的方法步驟

    這篇文章主要介紹了Node.js 實(shí)現(xiàn)遠(yuǎn)程桌面監(jiān)控的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 詳解node.js搭建代理服務(wù)器請(qǐng)求數(shù)據(jù)

    詳解node.js搭建代理服務(wù)器請(qǐng)求數(shù)據(jù)

    本篇文章主要介紹了詳解node.js搭建代理服務(wù)器請(qǐng)求數(shù)據(jù),具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04
  • Node.js進(jìn)行串口通信的實(shí)現(xiàn)示例

    Node.js進(jìn)行串口通信的實(shí)現(xiàn)示例

    本文主要介紹了Node.js進(jìn)行串口通信的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • node使用request請(qǐng)求的方法

    node使用request請(qǐng)求的方法

    這篇文章主要介紹了node使用request請(qǐng)求的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解NodeJs支付寶移動(dòng)支付簽名及驗(yàn)簽

    詳解NodeJs支付寶移動(dòng)支付簽名及驗(yàn)簽

    本文主要介紹了NodeJs支付寶移動(dòng)支付簽名及驗(yàn)簽的方法,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • Nodejs 模塊化實(shí)現(xiàn)示例深入探究

    Nodejs 模塊化實(shí)現(xiàn)示例深入探究

    這篇文章主要為大家介紹了Nodejs 模塊化實(shí)現(xiàn)示例深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Node.js連接MySQL數(shù)據(jù)庫(kù)的操作步驟

    Node.js連接MySQL數(shù)據(jù)庫(kù)的操作步驟

    在現(xiàn)代 Web 開(kāi)發(fā)中,與數(shù)據(jù)庫(kù)的交互是不可避免的一部分,Node.js提供了許多庫(kù)和模塊,使得連接和操作 MySQL 數(shù)據(jù)庫(kù)變得相對(duì)簡(jiǎn)單,本文將介紹如何使用Node.js連接MySQL數(shù)據(jù)庫(kù),并進(jìn)行一些基本的操作,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Nodejs監(jiān)聽(tīng)日志文件的變化的過(guò)程解析

    Nodejs監(jiān)聽(tīng)日志文件的變化的過(guò)程解析

    最近有在做日志文件的分析,其中有一個(gè)需求:A服務(wù)器項(xiàng)目需要用Nodejs監(jiān)聽(tīng)日志文件的變化,當(dāng)項(xiàng)目產(chǎn)生了新的日志信息,將新的部分通過(guò)socket傳輸?shù)紹服務(wù)器項(xiàng)目,本文重點(diǎn)給大家介紹Nodejs監(jiān)聽(tīng)日志文件的變化的相關(guān)知識(shí),一起看看吧
    2019-08-08
  • Nodejs 中的 Buffer 類(lèi)的創(chuàng)建與基本使用

    Nodejs 中的 Buffer 類(lèi)的創(chuàng)建與基本使用

    這篇文章主要為大家介紹了Nodejs中Buffer的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論

黔江区| 灵丘县| 江孜县| 军事| 乐陵市| 霸州市| 濮阳县| 元江| 屯昌县| 南华县| 柯坪县| 高邑县| 延吉市| 宝兴县| 清镇市| 呈贡县| 留坝县| 舟曲县| 夏河县| 社旗县| 无棣县| 吉安市| 吉水县| 遵化市| 双流县| 图片| 佳木斯市| 霞浦县| 黑龙江省| 商南县| 连州市| 清徐县| 邯郸县| 阜康市| 乐清市| 鸡泽县| 淄博市| 正蓝旗| 香格里拉县| 曲松县| 开化县|