环境的变化带来了技术大跃进,机遇和挑战同时到来。基于我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函数就调用这个函数来回调。

  在完成接收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型的方法。

  

[读书笔记]了不起的node.js+实践(一)的更多相关文章

  1. [读书笔记]了不起的node.js(三)

    这周的nodejs学习内容为几个依赖包的使用,把书上的例子都敲了一遍.这篇就以例程为线索,复习一下一周的工作. 1.connect 这个例程主要是使用connect依赖包,connect提供一个中间件 ...

  2. [读书笔记]了不起的node.js(四)

    这周的学习主要是nodejs的数据库交互上,并使用jade模板一起做了一个用户验证的网站.主要是遇到了一下几个问题. 1.mongodb版本过低 npm ERR! Not compatible wit ...

  3. [读书笔记]了不起的node.js(二)

    这周做项目做得比较散(应该说一直都是这样),总结就依据不同情境双开吧-这篇记录的是关于node的学习总结,而下一篇是做项目学到的web前端的知识. 1.HTTP篇 node的HTTP模块在第一篇时接触 ...

  4. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

    了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编   赵静 译 ISBN 978-7-121-21769-2 2 ...

  5. 了不起的Node.js读书笔记

    原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 第二章 Js概览 基于GoogleV8引擎 Object.keys(o) 数组方法:遍历forEach.过滤filter ...

  6. 【第十周读书笔记】读node入门,一本全面的node.js教程

    我学到了路由的定义,路由就是解析URL然后转到相应的执行程序. 我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码(这里“代码”对应整个应用的第三部 ...

  7. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  8. Node.js实践第一天

    实践案例一 表单提交 demo.html <!doctype html> <html> <head> <title>表单提交</title> ...

  9. node.js在windows下的学习笔记(5)---用NODE.JS创建服务器和客户端

    //引入http模块 var http = require('http'); //调用http的createServer的方法,这个方法有一个回调函数,这个回调数 //的作用是当有请求发送给服务器的时 ...

随机推荐

  1. 一名IT从业者的英语口语能力成长路径

    一名IT从业者的英语口语能力成长路径 来源: 微信公众号  发布时间: 2014-03-12 22:53  阅读: 6134 次  推荐: 24   原文链接   [收藏]   这篇文章是我最近十天口 ...

  2. MaskedTextBox控件实现输入验证

    Mask属性可以验证用户在文本中输入数据的格式 this.maskedTextBox1.Mask = "000000-00000000-000A";//身份证号码18位 this. ...

  3. ASP.NET 学习博客

    ASP.NET MVC5 网站开发实践 http://www.cnblogs.com/mzwhj/p/3537145.html 基于MVC4+EasyUI的Web开发框架形成之旅 http://www ...

  4. css清除浮动的几种方法整理

    四种清除浮动方法如下: 1.使用空标签清除浮动.空标签可以是div标签,也可以是P 标签.这种方式是在需要清除浮动的父级元素内部的所有浮动元素后添加这样一个标签 清除浮动,并为其定义CSS代码:cle ...

  5. oracle----复制表中的数据

    两种方法: 1. 在创建表的时候将数据从其他表中复制过来(并且表的结构也复制过来): 语法: CREATE TABLE table_name AS SELECT column1,......|* FR ...

  6. codeforces 392B Tower of Hanoi

    把前n个碟子从第一个塔移动到第三个塔有两种方法: 1.把前n-1个移动到第二个塔,把第n个移动到第三个塔,然后把前n-1个从第二个移动到第三个: 2.把前n-1个移动到第三个塔,把第n个移动到第二个塔 ...

  7. Attribute的一个列子

    其实在博客中也写过这个东西,也介绍过它的原理,原理很简单,就是在运行的时候通过反射拦截获取一些信息,但是我在写程序的时候几乎没用过,可能是自己接触的还不够多,也许是因为自己接触的功能不算复杂往往几句代 ...

  8. CreateObject("Wscript.Shell")用法

    WScript.Shell是WshShell对象的ProgID,创建WshShell对象可以运行程序.操作注册表.创建快捷方式.访问系统文件夹.管理环境变量. 该对象有一个run方法. Run 方法创 ...

  9. 打死也不换系统?笑谈过气的Windows XP

    http://tech.qq.com/a/20131012/007336.htm 按照IT领域的“安迪-比尔定律”:软件和游戏不断生成过户需求,硬件则通过技术创新来消化这些需求,这个过程会刺激用户在电 ...

  10. java的异常处理机制(try…catch…finally)

    1 引子try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话.不信 ...