27
18911184380
当前位置:首页 > 资讯 > 建站知识

[北京网站制作]基于Node.js、Express和Jscex开发的ToDo网站示例

2011-10-24 酷站科技

根据Node.js、Express和Jscex开发设计的ToDo网址实例

Jscex的关键应用情景是“JavaScript异步编程”,但是并沒有限定是跑在电脑浏览器還是服务端。近期Node.js很火爆,也刚公布了原生态的Windows版,许多老同学聚会用它来做一些网址那样的微信小程序。现阶段用Node.js开发网站最知名的架构是Express,应用起來也是较为非常容易的。前不久见到CNodeJS小区的一篇文章,有同学们将一个Python写的ToDo目录网址移殖来到Node.js上,我为了更好地营销推广Jscex,就fork了这一新项目,将其改动为根据Jscex的版本号,大家能够 来较为一下。自然这一网址过度简易,因为我已经找寻更适合的新项目。(网站制作)

51CTO强烈推荐专题讲座:Node.js会员专区

JavaScript是一个沒有堵塞特点的語言,因而各种API都是会设计方案为多线程,这针对网络服务器的弹性和手机客户端网页页面的回应工作能力都是有益处,但是在程序流程撰写上便会碰到各种各样难题了。比如在ToDo实例中的一个简易的处理函数,由于必须数据库查询,就需要写出带到调的模样:

  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自变量用于实际操作MySQL数据库查询,它的query方式 传到sql(很有可能还会继续有主要参数)并出示一个回调函数,用于提醒不正确或者回到查寻結果。在回调函数中大家务必分辨err是不是存有,假如存有便启用next汇报架构“出错了”。每一个多线程实际操作都务必这般,设想假如在这个查寻后也有另一个查寻,则还必须开展一次嵌套循环和err分辨。每一个处理函数全是这般,这也是异步编程的苦恼之一:无法开展统一的错误处理,解决编码一直必须分散化在各部,一不小心就变为“野出现异常”,还难以清查出去。

我将ToDo网址简易地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.     }  

一般来说,将一个多线程插口给Jscex化并不一定那么多编码(最重要的实际上仅仅onStart涵数)。这儿近30行编码,在其中绝大多数是为了更好地适用“拉长”主要参数,因而queryAsync涵数会保存启用时的全部主要参数,补上一个callback,再去启用query涵数自身。这时,便能够 去改变以前的index等处理函数了(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涵数的功效,是将一个“接纳req和res,回到Task”的涵数,封裝成规范的“接纳req、res和next三个主要参数”的处理函数,并出示统一的处理错误:

  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里保存了原来每个处理函数的完成,很感兴趣的盆友能够 比照一下他们以前的区别。遗憾的是,因为ToDo确实过度简易,Jscex的优点并沒有主要表现出去过多。比如,每一个程序处理中只有一个MySQL查寻,沒有分辨和循环系统,更不要说为了更好地灵活运用IO高并发工作能力,进而组成好几个多线程涵数了。因而,我近期也一直在找寻更繁杂一些的实例,但是好像用Express的开源网站并不常见,我基本上都想自身写一个了。现阶段觉得Nodepad好像还算非常好,接下去很有可能会对它着手。

ToDo网址依靠Express,ejs和MySQL驱动器,另外我将Jscex做为加上为它的子控制模块。假如您要复制一份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中文站上发布一系列有关Jscex的文章内容,不仅有有关电脑浏览器端JavaScript开发设计,也是有在服务端运用Node.js开发设计的內容。很有可能您现阶段还很有可能会有一定的疑虑,比如为何要应用风险的eval涵数,eval和Jscex.compile涵数不可以封裝起來吗?实际上在看过我的文章内容并对Jscex拥有基础掌握以后,便会发觉这种全是以“传统式目光”来对待Jscex时需产生的误会。Jscex的作法确实“独辟蹊径”,不然在JavaScript多线程类库早已比比皆是的状况下,我不知怎么让它出类拔萃。(高档网站建设)

来源于申明:以上内容一部分(包括照片、文本)来自互联网,若有侵权行为,请立即与本网站联络(010-57218159)。
如没特殊注明,文章均为酷站科技原创,转载请注明来自http://www.bjkuzhan.com/jianzhanzhishi/4984.html
联系专业的商务顾问,制定方案,专业设计,一对一咨询及其报价详情
服务热线服务热线 18911184380
联系我们 contact us
18911184380
18911184380 — 海淀营业部
18911184380— 昌平营业部
+

酷站科技为你提供上门/网站策略方案

留下联系方式,我们将会在一个工作日内与你联系

隐私条款信息保护中,请放心填写