激情小说强奸乱伦亚洲色图_欧美xxxx性受黑人xyx性爽_国产www亚洲а∨天堂一区_日本无码线亚洲中文精品_国产女厕所盗摄老师厕所嘘嘘_香蕉视频在线观看亚洲_久久国产亚洲AV无码麻软件_18禁白浆欧美一区二区三区_国产午夜av无码无片久久96_国产成人精品福利视频

27
18911184380
當(dāng)前位置:首頁 > 資訊 > 建站知識(shí)

[北京網(wǎng)站制作]基于Node.js、Express和Jscex開發(fā)的ToDo網(wǎng)站示例

2011-10-24 酷站科技

根據(jù)Node.js、Express和Jscex開發(fā)設(shè)計(jì)的ToDo網(wǎng)址實(shí)例

Jscex的關(guān)鍵應(yīng)用情景是“JavaScript異步編程”,但是并沒有限定是跑在電腦瀏覽器還是服務(wù)端。近期Node.js很火爆,也剛公布了原生態(tài)的Windows版,許多老同學(xué)聚會(huì)用它來做一些網(wǎng)址那樣的微信小程序。現(xiàn)階段用Node.js開發(fā)網(wǎng)站最知名的架構(gòu)是Express,應(yīng)用起來也是較為非常容易的。前不久見到CNodeJS小區(qū)的一篇文章,有同學(xué)們將一個(gè)Python寫的ToDo目錄網(wǎng)址移殖來到Node.js上,我為了更好地營銷推廣Jscex,就fork了這一新項(xiàng)目,將其改動(dòng)為根據(jù)Jscex的版本號(hào),大家能夠 來較為一下。自然這一網(wǎng)址過度簡(jiǎn)易,因?yàn)槲乙呀?jīng)找尋更適合的新項(xiàng)目。(網(wǎng)站制作)

51CTO強(qiáng)烈推薦專題講座:Node.js會(huì)員專區(qū)

JavaScript是一個(gè)沒有堵塞特點(diǎn)的語言,因而各種API都是會(huì)設(shè)計(jì)方案為多線程,這針對(duì)網(wǎng)絡(luò)服務(wù)器的彈性和手機(jī)客戶端網(wǎng)頁頁面的回應(yīng)工作能力都是有益處,但是在程序流程撰寫上便會(huì)碰到各種各樣難題了。比如在ToDo實(shí)例中的一個(gè)簡(jiǎn)易的處理函數(shù),由于必須數(shù)據(jù)庫查詢,就需要寫出帶到調(diào)的模樣:

  1. exports.index = function (req, res, next) {  
  2.     db.query('select * from todo order by finished asc, id asc limit 50'function (err, rows) {  
  3.         if (err) return next(err);  
  4.         res.render('index', { todos: rows });  
  5.     });  
  6. }; 

db自變量用于實(shí)際操作MySQL數(shù)據(jù)庫查詢,它的query方式 傳到sql(很有可能還會(huì)繼續(xù)有主要參數(shù))并出示一個(gè)回調(diào)函數(shù),用于提醒不正確或者回到查尋結(jié)果。在回調(diào)函數(shù)中大家務(wù)必分辨err是不是存有,假如存有便啟用next匯報(bào)架構(gòu)“出錯(cuò)了”。每一個(gè)多線程實(shí)際操作都務(wù)必這般,設(shè)想假如在這個(gè)查尋后也有另一個(gè)查尋,則還必須開展一次嵌套循環(huán)和err分辨。每一個(gè)處理函數(shù)全是這般,這也是異步編程的苦惱之一:無法開展統(tǒng)一的錯(cuò)誤處理,解決編碼一直必須分散化在各部,一不小心就變?yōu)?ldquo;野出現(xiàn)異常”,還難以清查出去。

我將ToDo網(wǎng)址簡(jiǎn)易地Jscex化了一下。最先讓MySQL的查尋可以連接Jscex(libjscex.mysql.js):

  1. exports.jscexify = function (db) {  
  2.     db.queryAsync = function () {  
  3.         var _this = this;  
  4.  
  5.         var args = [];  
  6.         for (var i = 0; i < arguments.length; i ) {  
  7.             args.push(arguments[i]);  
  8.         }  
  9.  
  10.         var delegate = {  
  11.   &n bsp;         onStart: function (callback) {  
  12.  
  13.                 args.push(function (err, result) {  
  14.                     if (err) {  
  15.                         callback("failure", err);  
  16.                     } else {  
  17.                         callback("success", result);  
  18.                     }  
  19.                 });  
  20.  
  21.                 _this.query.apply(_this, args);  
  22.             }  
  23.         };  
  24.  
  25.         return new Jscex.Async.Task(delegate);  
  26.     }  

一般來說,將一個(gè)多線程插口給Jscex化并不一定那么多編碼(最重要的實(shí)際上僅僅onStart涵數(shù))。這兒近30行編碼,在其中絕大多數(shù)是為了更好地適用“拉長”主要參數(shù),因而queryAsync涵數(shù)會(huì)保存啟用時(shí)的全部主要參數(shù),補(bǔ)上一個(gè)callback,再去啟用query涵數(shù)自身。這時(shí),便能夠 去改變以前的index等處理函數(shù)了(controllerstodo.js),比如:

  1. exports.index = toHandler(eval(Jscex.compile("async"function (req, res) {  
  2.  
  3.     var todos = $await(db.queryAsync('select * from todo order by finished asc, id asc limit 50'));  
  4.     res.render("index", { todos: todos });  
  5.  
  6. })));&n bsp;

toHandler涵數(shù)的功效,是將一個(gè)“接納req和res,回到Task”的涵數(shù),封裝成規(guī)范的“接納req、res和next三個(gè)主要參數(shù)”的處理函數(shù),并出示統(tǒng)一的處理錯(cuò)誤:

  1. var toHandler = function (asyncFunc) {  
  2.     return function (req, res, next) {  
  3.         var task = asyncFunc(req, res);  
  4.         task.addListener(function () {  
  5.             if (task.status == "failed") {  
  6.                 next(task.error);  
  7.             }  
  8.         });  
  9.         task.start();  
  10.     }  

我還在todo.js里保存了原來每個(gè)處理函數(shù)的完成,很感興趣的盆友能夠 比照一下他們以前的區(qū)別。遺憾的是,因?yàn)門oDo確實(shí)過度簡(jiǎn)易,Jscex的優(yōu)點(diǎn)并沒有主要表現(xiàn)出去過多。比如,每一個(gè)程序處理中只有一個(gè)MySQL查尋,沒有分辨和循環(huán)系統(tǒng),更不要說為了更好地靈活運(yùn)用IO高并發(fā)工作能力,進(jìn)而組成好幾個(gè)多線程涵數(shù)了。因而,我近期也一直在找尋更繁雜一些的實(shí)例,但是好像用Express的開源網(wǎng)站并不常見,我基本上都想自身寫一個(gè)了?,F(xiàn)階段覺得Nodepad好像還算非常好,接下去很有可能會(huì)對(duì)它著手。

ToDo網(wǎng)址依靠Express,ejs和MySQL驅(qū)動(dòng)器,另外我將Jscex做為加上為它的子控制模塊。假如您要復(fù)制一份ToDo的編碼盤玩一番,能夠 :

  1. > git clone git://github.com/JeffreyZhao/todo.git  
  2. > cd todo  
  3. > git submodule init  
  4. > git submodule update  
  5. > npm install express ejs mysql  
  6. > node server.js 

從今天開始,我能在InfoQ中文站上發(fā)布一系列有關(guān)Jscex的文章內(nèi)容,不僅有有關(guān)電腦瀏覽器端JavaScript開發(fā)設(shè)計(jì),也是有在服務(wù)端運(yùn)用Node.js開發(fā)設(shè)計(jì)的內(nèi)容。很有可能您現(xiàn)階段還很有可能會(huì)有一定的疑慮,比如為何要應(yīng)用風(fēng)險(xiǎn)的eval涵數(shù),eval和Jscex.compile涵數(shù)不可以封裝起來嗎?實(shí)際上在看過我的文章內(nèi)容并對(duì)Jscex擁有基礎(chǔ)掌握以后,便會(huì)發(fā)覺這種全是以“傳統(tǒng)式目光”來對(duì)待Jscex時(shí)需產(chǎn)生的誤會(huì)。Jscex的作法確實(shí)“獨(dú)辟蹊徑”,不然在JavaScript多線程類庫早已比比皆是的狀況下,我不知怎么讓它出類拔萃。(高檔網(wǎng)站建設(shè))

來源于申明:以上內(nèi)容一部分(包括照片、文本)來自互聯(lián)網(wǎng),若有侵權(quán)行為,請(qǐng)立即與本網(wǎng)站聯(lián)絡(luò)(010-57218159)。
如沒特殊注明,文章均為酷站科技原創(chuàng),轉(zhuǎn)載請(qǐng)注明來自http://www.ttscar.com.cn/jianzhanzhishi/4410.html
聯(lián)系專業(yè)的商務(wù)顧問,制定方案,專業(yè)設(shè)計(jì),一對(duì)一咨詢及其報(bào)價(jià)詳情
服務(wù)熱線服務(wù)熱線 18911184380
聯(lián)系我們 contact us
18911184380
0531-88903031 — 濟(jì)南分部

+

酷站科技為你提供上門/網(wǎng)站策略方案

留下聯(lián)系方式,我們將會(huì)在一個(gè)工作日內(nèi)與你聯(lián)系

隱私條款信息保護(hù)中,請(qǐng)放心填寫