NodeJS學(xué)習(xí)筆記之Connect中間件應(yīng)用實(shí)例
一,開篇分析
大家好哦,大熊君又來(lái)了,昨天因?yàn)橛悬c(diǎn)個(gè)人的事沒有寫博客,今天又出來(lái)了一篇,這篇主要是寫一個(gè)記事本的小應(yīng)用,前面的文章,
我也介紹過“Connect”中間件的使用以及“Mongodb”的用法,今天就結(jié)合這兩個(gè)中間件,寫個(gè)實(shí)際的例子,不斷完善和重構(gòu),已達(dá)到
充分學(xué)習(xí)的目的。好了,廢話不說(shuō)了,直接進(jìn)入主題。
二,需求分析
(1),用戶注冊(cè),登錄功能(沒有涉及很復(fù)雜的交互場(chǎng)景,注冊(cè)時(shí)會(huì)有用戶判斷是否已存在)。
(2),用戶登錄成功,進(jìn)入筆記管理系統(tǒng)的后臺(tái)(筆記模塊的增刪改查功能)。
(3),用戶可以具有簡(jiǎn)單的權(quán)限劃分(管理員,注冊(cè)用戶)。
(4),界面比較簡(jiǎn)單,以學(xué)習(xí)為主。
三,開始設(shè)計(jì)應(yīng)用(第一部分)
(1),建立用戶登錄頁(yè)面,代碼如下:
<!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>用戶名:</span><input type="text" name="name" /><br/><br/>
<span>密 碼:</span><input type="password" name="password" />
<input type="submit" value="登錄" />
<a href="reg.html">我要注冊(cè)</a>
</form>
</body>
</html>
效果圖:

(2),建立用戶注冊(cè)頁(yè)面,代碼如下:
<!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>用戶名:</span><input type="text" name="name" /><br/><br/>
<span>密 碼:</span><input type="password" name="password" /><br/><br/>
<input type="submit" value="注冊(cè)" />
</form>
</body>
</html>
效果圖:

(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),建立模型實(shí)體類“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 ;
效果圖:

(5),建立應(yīng)用程序“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 .") ;
}) ;
說(shuō)明一下:
(1)“connect.query()”------處理“Get”請(qǐng)求參數(shù)解析。
(2)“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ǔ)句。
(2),劃分層級(jí),如模型,視圖,路由。
(3),不斷優(yōu)化和修改本文的例子(比如注冊(cè)驗(yàn)證用戶是否存在,可以獨(dú)立出“UserManager”做一層代理完成用戶驗(yàn)證和保存的動(dòng)作)。
?。?),明天繼續(xù)完成后續(xù)的功能,盡請(qǐng)期待。
相關(guān)文章
Node.js 實(shí)現(xiàn)遠(yuǎn)程桌面監(jiān)控的方法步驟
這篇文章主要介紹了Node.js 實(shí)現(xiàn)遠(yuǎn)程桌面監(jiān)控的方法步驟,文中通過示例代碼介紹的非常詳細(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ù),具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04
Node.js進(jìn)行串口通信的實(shí)現(xiàn)示例
本文主要介紹了Node.js進(jìn)行串口通信的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
詳解NodeJs支付寶移動(dòng)支付簽名及驗(yàn)簽
本文主要介紹了NodeJs支付寶移動(dòng)支付簽名及驗(yàn)簽的方法,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
Node.js連接MySQL數(shù)據(jù)庫(kù)的操作步驟
在現(xiàn)代 Web 開發(fā)中,與數(shù)據(jù)庫(kù)的交互是不可避免的一部分,Node.js提供了許多庫(kù)和模塊,使得連接和操作 MySQL 數(shù)據(jù)庫(kù)變得相對(duì)簡(jiǎn)單,本文將介紹如何使用Node.js連接MySQL數(shù)據(jù)庫(kù),并進(jìn)行一些基本的操作,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
Nodejs 中的 Buffer 類的創(chuàng)建與基本使用
這篇文章主要為大家介紹了Nodejs中Buffer的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

