了不起的node.js读书笔记之node.js中的特性


Posted in Javascript onDecember 22, 2014

环境的变化带来了技术大跃进,机遇和挑战同时到来。基于我js也没有学,只好赶鸭子上架一起学了。(>?<)

了不起的node.js读书笔记之node.js中的特性

1.先读读书

一开始就不知死活地看《深入浅出node.js》,弄得团团转,看完才知道这本书是要一定基础的。在网上搜刮到了41页的《node入门》,自己学着搭建了一个Web应用。并且在刷新成就感后,就抱读《了不起的node.js》。现准备看完这本书后再回读《深入浅出node.js》。

2.搭建环境 运行git上的例程(3次报错)

在官网下载msi后,一路next。输入命令npm install时,报错"npm ERR! not found: git"。原因是新电脑没有按照git。

安装外部依赖包时,报错"gyp ERR! configure error",原因也是Python环境没有。而且这个依赖包只能在低版本下安装。最后一次报错是"MSBUILD:error MSB3428:未能加载Visual C++组件"VCBuild.exe"",在安装.net framework 2.0 SDK和mvs2005后还是报错。果断弃了。

3.第一个Web应用

在运行完"Hello World"后,开始编写一个完全基于Node的Web应用。首先需要启动服务器模块,http模块中的createServer函数返回的对象有一个listen([PORT])方法监听端口。这个函数的参数很奇怪,是一个函数定义。在JavaScript中,一个函数可以作为另一个函数接收一个参数,参数函数就叫匿名函数。而使用这种方法的原因是node采用了基于事件驱动的回调。当服务器在单进程接收到一个请求时,就会调用这个函数来处理这个请求。当有相应的事件发生时,createServer函数就调用这个函数来回调。

了不起的node.js读书笔记之node.js中的特性

在完成接收http请求后,我们就要处理请求了。首先,我们抽象地把请求提出不同的URL和GET、POST参数。这里用到了两个内部模块URL(解析URL)、Query String(处理查询字符串)。并且通过依赖注入的方式把router模块添加进去。接着,需要完成处理请求的模块,才完善路由。请求先全部通过一个对象(handle)进行模块间的传递,并让处理程序能做出响应。一般来说,让请求处理程序通过onRequest函数直接返回(return())他们要展示给用户的信息。不过,在进行阻塞操作时会非常耗时,所以我们要使用非阻塞操作。使用回调,通过将函数作为参数传递给其他需要花时间做处理的函数。相比采用将内容传递给服务器的方式,我们这次采用将服务器“传递”给内容的方式。就是将response对象(从服务器的回调函数onRequest()获取)作为函数参数通过路由传递给处理程序。这样,处理程序就可以调用该对象上的函数。

接下来再进行处理环节,通过表单来上传图片,这里用到了外部依赖包formidable来接收图片。这个模块就是用来处理表单和上传文件的。首先使用var form = new formidable.IncomingForm();来获得一个表单对象。这个对象的parse方法可以解析处理表单数据。我们就很简单地把文件保存起来。而保存文件则使用了fs模块。通过重命名方法来指定保存的位置,通过使用同步的方法renameSync()可以使得保存文件行为先于展示图片行为。

展示图片则十分简单,通过fs的readFile方法读取文件,在其回调函数中使用response.write(file, "binary")就可以在浏览器中展示图片。

总结一下:通过这个例程,我们了解到了node.js中的特性,如单线程、异步、事件驱动等。其中一些抽象概念也通过例程展示了一遍,但还需深入了解。通过例程学习就是需要在不懂时查阅资料,这种学习方法也是很好的Input-Person-Output型的方法。

Javascript 相关文章推荐
juqery 学习之三 选择器 子元素与表单
Nov 25 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
Apr 02 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
Feb 23 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
May 15 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 Javascript
JS实现简单易用的手机端浮动窗口显示效果
Sep 07 Javascript
AngularJs表单校验功能实例代码
Feb 09 Javascript
vue中如何使用ztree
Feb 06 Javascript
vue中 this.$set的用法详解
Sep 06 Javascript
JS内置对象和Math对象知识点详解
Apr 03 Javascript
js简单实现自动生成表格功能示例
Jun 02 Javascript
jQuery+ajax中getJSON() 用法实例
Dec 22 #Javascript
IE8中动态创建script标签onload无效的解决方法
Dec 22 #Javascript
javascript的日期对象、数组对象、二维数组使用说明
Dec 22 #Javascript
javascript中的遍历for in 以及with的用法
Dec 22 #Javascript
Jquery实现图片预加载与延时加载的方法
Dec 22 #Javascript
javascript定义变量时加var与不加var的区别
Dec 22 #Javascript
javascript操作字符串的原生方法
Dec 22 #Javascript
You might like
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
javascript数组详解
2014/10/22 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
layui中layer前端组件实现图片显示功能的方法分析
2017/10/13 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python的id()函数介绍
2013/02/10 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
python实现学生通讯录管理系统
2021/02/25 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
SQL注入攻击的种类有哪些
2013/12/30 面试题
学校消防演习方案
2014/02/19 职场文书
留学推荐信范文
2014/05/10 职场文书
工业设计专业自荐书
2014/06/05 职场文书
联片教研活动总结
2014/07/01 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js