资源描述:
《用nodejs做web前端服务器的一些经验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、用nodejs做Web前端服务器的一些经验前不久NCZ发表了新文章Node.jsandthenewwebfront-end(译文),描述了用node.js做Web前端服务器的种种优势。NCZ在文章中推荐了一套服务器模型(图片来源自Node.jsandthenewwebfront-end)。这个模型在传统的后台服务器前,增加了一层node.js实现的FrontendServer层。这种架构的最大好处是前后端开发人员的依赖分离,让后端开发人员不必再关心数据在页面间如何传递、用户数据获取是通过Ajax还是刷新页面等前端开发所涉及的方方面面,前端开发人员也不必再关心数据如何在数据库中存储等等后
2、端问题。Thefront-endandback-endnowhaveaperfectsplitofconcernsamongsttheengineerswhoareworkingonthoseparts.Thefront-endhasexpandedbackontotheserverwheretheNode.jsUIlayernowexists,andtherestofthestackremainstherealmofback-endengineers.–NicholasC.Zakas碰巧前不久,我在公司内部尝试了这种架构,这里正好分享一些node.js做Web前端服务器的经验。与后台
3、服务器的交互在用户的一次请求中,往往需要请求多个不同的后台接口。由于node.js的异步特性,写多次HTTP请求并处理回调是一件非常痛苦的事情,例如varrequest=require('request');exports.index=function(req,res){request('API_A',function(err,response,body){if(err){//...}request('API_B',function(err,response,body){if(err){//...}request('API_C',function(err,response,body){
4、if(err){//...}//...});});});};这种情况通过[async]库可以很很好的解决这个问题。[async]是一个工具包,提供了各种各样的小函数来简化node.js的异步回调处理。varrequest=require('request');varasync=require('async');exports.index=function(req,res){async.map(['API_A','API_B','API_C',/*...*/],request,function(err,results){if(err){//...}varresultA=results[0
5、];varresultB=results[1];varresultC=results[2];//...});};通过async.map可以很轻易的实现并行请求数据。如果需要串行请求数据,可以使用async.Series函数。除此之外,还可以使用async.mapLimit来限制node.js的并发连接数。常用API数据的获取有些API数据是几乎每个页面都会用到的,例如当前用户的个人信息等。对于这类数据,可以通过middleware的方式来将它传递给controller。varrequest=require('request');varasync=require('async');fun
6、ctionuserdata(req,res,next){request('GET_USER_API',function(err,response,body){if(err){next(err);return;}req.user=JSON.parse(body);next();});}app.get('/pageA',userdata,pageAController);app.get('/pageB',userdata,pageBController);app.get('/pageC',userdata,pageCController);Cookie代理如果API接口需要验证Cookie
7、,那么node.js在发送API请求时,需要将用户的Cookie信息发到后台服务器。同样的,如果后台API接口修改了用户Cookie,例如登陆API,那么还需要node.js将设置用户Cookie的请求转发给用户。这就需要实现一个cookieRequest方法。varrequest=require('request');varcookieRequest=function(userRequest,userResponse,url,callback