我对Node.js的看法
node.js是基于chrome的js运行引擎(俗称v系列, 特点就是快)运行的服务器脚本语言,用于方便地搭建响应速度快、扩展方便的网络服务。之所以快速高效得益于它的非阻塞IO和便捷的事件驱动。
为什么我们要使用Node.js?
处理高并发能力强,而且基于函数式编程使得异步回调变的非常简单。
还有一点就是前后分离时在后端的web层到底是应该谁来开发的问题,因为web层除了拼页面外还有一些关联前端比较多的工作,这部分工作交由后端做呢,不能很好的理解其中的一些功能需求及一些技术,拿拼页面讲,后端人员真的只是拿做好的html进行拼接;交由前端做呢,很多前端人员并不熟悉类似java、php等语言所以效果不佳,但是,node.js的出现解决了这个问题,前端人员运用熟悉的js也能完成web的一些工作,而后端人员只要考虑编写借口api就OK了。
本书节选试读
试读的节选是第3章:node.js基于mocha的测试,第6章:node.js使用session和oauth进行验证,第8章:使用express和hapi构建rest服务。
从本书的目录来看本书从node的安装,helloworld的编写,到实践开发,工具的运用等一条龙非常详细。
TDD测试驱动开发是一种重要的敏捷开发技术,有效地提升代码质量、改进错误改进方式,使得开发更有效率。
oauth验证也是目前业内非常流行的标准验证授权。
Rest服务是富客户端和API服务端的标志,rest化的服务端能服务多种形式的客户端,包括手机移动端、其他服务端及富客户端的PC。
安装mocha
使用npm安装mocha
mocha提供以下有用的服务:
- 支持测试报告
- 异步运行模式
- 丰富的配置选项
命令使用:
mocha test.js [options] 具体的options不作介绍。
hock机制,即before(), beforeEach(), after(), afterEach()提供各个执行阶段的hock。
用assert进行测试
assert是核心功能,通过require('assert')来获取该模块。
var assert = require('assert'); assert.equal(1,1,'1===1');
类似上面的代码进行测试。
用expect.js进行行为驱动开发
expect.js是BDD测试,链式语法,使用更加贴近自然语言。
写个断言有几种方式,expect(response).to.be(true)和expect(response).equal(true)
- ok/true: 检查是否为真
- to.be, to: 连接方法
- not: expect(response).not.to.be()
- a/an: 检测类型
- contain/include: 数组包含
- above/below: 检测大于小于
测试实例
略
express.js中间件权限管理
配置路由进行验证
app.get('api/get', auth);//只对GET api/get进行拦截 app.all('api/*', auth);//对所有方式,且以api开头的请求进行拦截
var auth = function(req, res, next) { //验证 //如果不通过 next(new Error('Not authorized')); //or res.send(401); return next(); }
基于token的权限验证
所谓token验证即在请求的数据或者header中携带token参数,然后在auth中验证token是否合法,一般还用一些加密。
基于session的权限验证
目前普遍的做法,但是由于一些原因客户端并不能很好地支持cookie,所以有上面的token验证。
session验证就是获取cookie中的sessionid或者其他方法获取sessionid,然后通过sessionid获取session判断是否有权限。
本章介绍了如何使用cookie和session。
项目实践
everyauth实现auth1.0/2.0 略
Restful认识
restful就是客户端的请求是无状态的,服务器不保存客户端请求状态,所以保证可以被任意服务器处理,具有以下特征。
- 扩展性强,可以将部件独立部署。
- 使用简单的动作和内容替代soap。
- 使用不同的http方式表示不同的动作,GET、POST、DELETE、PUT、OPTIONS
- 内容不局限于json,还可以是xml,csv
GET、DELETE、PUT都是幂等性。
项目依赖
依赖express、mongoskin
使用Mocha和superagent进行测试
SuperAgent链式函数使得http请求非常方便,使用TDD方式开发。
it('post object', function(done){ superagent .post('http://localhost:3000/collections/test') .send({ name: 'John', email: 'john@rpjs.co' }) .end(function(e,res){ expect(e).to.eql(null); expect(res.body.length).to.eql(1); expect(res.body[0]._id.length).to.eql(24); id = res.body[0]._id done(); }); });
上面的测试代码表示:
- 返回的错误对象为空null
- 返回的数据对象数组长度为1
- 返回的数据组第一个对象的_id长度为24
express构建rest
我们使用bodyParser.urlencoded()和bodyParser.json()来获取参数和数据,这样可以获取rest的url中的参数,和传输过来的数据。
app.param('collectionName', function(req, res, next, collectionName){ req.collection = db.collection(collectionName); return next(); })
上面的代码表示所有路由中包含collectionName时会拦截进行执行,将mongo的collection绑定在req请求对象上。
app.get('/collections/:collectionName', function(req, res, next) { req.collection.find({},{ limit:10, sort: [['_id',-1]] }) .toArray(function(e, results){ if (e) return next(e); res.send(results) }); });
拦截GET方法,查询对应的collection的,并且限制10个。
hapi构建rest
hapi比express更加复杂,更加丰富。
基本上和express差不多,区别的地方如下:
- path参数使用{}而不是:
- 路由定义是数组,这样可以一次定义多个路由
- 定义路由时使用path,method,handler回调函数
- 使用reply而不是response,返回数据
总结
本书还是非常实在地从项目开发的各个角度出发对node的使用作全方位的讲解,还有一个特点是本书的代码实例量恰到好处,非常详细又不会啰嗦地使用代码来说明使用方式这样对初学者或者首次使用这些工具的开发者都能很便捷地起步。
不过偏实战的书对具体深入还是不够,抑或试读部分是这样的其实整书又是另一番风景,这里这是窥豹一斑啊!所以,还是求书仔细阅读。
相关推荐
《Node.js项目实践:构建可扩展的Web应用》用专业的讲解方式,带领读者从“Hello World”示例开始,一步步将其构建成有实际用途的Node.js应用。《Node.js项目实践:构建可扩展的Web应用》涉及许多组件的使用,比如...
Node实战|组件|工具|模块库大全 搞定最复杂应用 全面提升代码质量与开发效率
Practical Node.js: Building Real-World Scalable Web Apps is a hands-on manual for developing production-ready web applications and services by leveraging the rich ecosystem of Node.js packages....
《Node.js项目实践-构建可扩展的web应用》--全套源代码(2015.09.04) 1.Node.js学习必备; 2.MongoDB学习必备; 3.Mongoose学习必备; 4.Express框架学习必备
Node.js项目实践-构建可扩展的Web应用,nodejs已经非常广泛
用途: 用于构建快速、可扩展的网络应用和服务 内容描述: 一个基于Chrome V8引擎的JavaScript运行环境,使开发者能够使用JavaScript编写服务器端代码。Node.js具有事件驱动、非阻塞I/O模型,非常适合构建数据密集型...
后端开发 技术关键词: Node.js ...内容描述: 这个资源是一个全面的Node.js开发指南,涵盖了从基础概念到高级主题的所有内容,包括异步编程、事件驱动、模块化以及如何与数据库和外部APIs交互的最佳实践。
Node.js的实现机制、Node.js的原生扩展与应用;Node.js的编码习惯;Node.js操作MySQL和MongoDB;基于Node.js的Myweb框架的基本设计架构及实现;利用Myweb框架实现一个简单的Web聊天室;在线聊天室案例和在线中国象棋...
较为详细地讲解了node.js,包括起源、发展、运行等方面。
推荐理由:一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它采用渐进式JavaScript,全面支持TypeScript,同时还允许开发人员使用纯JavaScript编写代码。Nest 结合了面向对象编程(OOP)、函数式编程(FP)...
[Packt Publishing] Node.js the Right Way Practical, Server-Side JavaScript That Scales (E-Book) ☆ 图书概要:☆ Get to the forefront of server-side JavaScript programming by writing compact, robust,...
Node.js是一个基于Chrome V8引擎的JavaScript运行时,广泛用于构建可扩展的网络应用。在Vue.js项目中,Node.js通常用于安装和管理项目依赖,以及运行构建和开发服务器等任务。 内容: Node.js介绍: 描述: 介绍...
Node.js是一套用来编写高性能网络服务器的JavaScript工具包,Node.js入门经典采用直观、循序渐进的方法对如何使用Node.js来开发及具速度和可扩展性优势的服务器端应用程序进行了讲解。 《Node.js入门经典》分为6...
基于Node快速构建WEB应用服务的框架
通过在前端充分利用 Node.js 概念、工具和最佳实践来增强您的 Web 开发项目 主要特征 探索 Node.js 的内部结构,重点关注前端 Web 开发 探索 npm 前端生态系统,包括其工具、使用和开发流程 了解关键的 Web 开发...
, 读者将学会使用Node.js 和MongoDB来建立更具可扩展性的高性能网站,并利用AngularJS 创新的MVC 方法构建更有效的网页和应用程序,以及把这三者结合在一起使用,从而提供卓越的下一代Web解决方案。, 《Node.js+...
第5章 使用Node.js进行Web开发 79 5.1 准备工作 80 5.1.1 使用http模块 82 5.1.2 Express框架 83 5.2 快速开始 84 5.2.1 安装Express 84 5.2.2 建立工程 85 5.2.3 启动服务器 86 5.2.4 工程的结构...
教学大纲提供了清晰的学习路径和目标,通过理论讲解和实际案例演示,帮助读者了解如何使用Node.js构建高性能的Web应用程序。 其他说明:资源中的教学大纲提供了详细的课程安排和教学目标,帮助读者系统地学习Node....