《Node入门》读书笔记

一直以来,我都仅仅将JavaScript视为一种前端技术,由客户端的浏览器解释并执行,这种观念在心中已经根深蒂固。直到Node.js的出现,这种观念才被彻底地击碎。通过Node.js技术,JavaScript能实现服务器端应用。带着强烈的好奇心,我决定试图了解Node.js。说干就干,在Google上搜了一圈,发现了很多关于Node.js的资料,Node.js社区非常的活跃,最后找到了《Node入门》这本书。简单浏览了下,发现这本书挺适合像我这样的Node.js新手,所以我决定仔细把这本书读完(看完大概花了10小时,看的慢)。下面就是我做的读书笔记:

1,JavaScript从诞生至今,其存在形态经历了三个阶段:一是,上世纪90年代作为对DHTML进行增强的小工具;二是,jQuery这样严格意义上的前端技术;三是,由于Node.js的出现,作为服务端技术。

2,要实现在服务器端运行JavaScript代码,代码需要先被解释然后正确的执行。Node.js的原理正是如此,它使用了Google的V8虚拟机(即:Chrome浏览器使用的JavaScript运行环境),来解释和执行JavaScript代码。

3,Node.js事实上既是一个运行时环境,同时又是一个库。

4,我们还要对此(一个实际的使用Node.js的应用)进行抽象,来寻找一种适合构建更为复杂的Node.js应用的方式。

5,使用Node.js时,我们不仅仅在实现一个应用,同时还实现了整个HTTP服务器。

6,使用JavaScript编写的一个简单的HTTP服务器原型:

// Version 1
var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);
console.log("Server has started.");

// Version 2
var http = require("http");

function onRequest(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
 

7,在JavaScript中,一个函数可以作为另一个函数的参数进行传递。我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数。

8,用Node.js构建的HTTP服务器是单进程的,但请求任何时候都可能到达,所以需要对请求进行异步处理。

9,这个就是回调(Call Back)。我们给某个方法传递一个函数,这个方法在有相应事件发生时调用这个函数进行回调。

10,构建一个简单Node.js外部模块示例:

// Server模块
var http = require("http");

function start() {
  function onRequest(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;
  在主文件main.js中使用Server模块:
var server = require("./server");

server.start();
 

11,为了让服务器将不同的请求路由到相应的代码,我们需要为路由提供请求的URL和GET及POST参数。因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数。

12,就像这样,我们传递一个东西,然后服务器利用这个东西来完成一些事情。但是,服务器其实不需要这样的东西,它只需要把事情做完就行,为了把事情做完,你根本不需要东西,你需要的是动作。

13,Node.js在不新增额外线程的情况下,依然可以对任务进行并行处理。实际上,Node.js是单线程的,它通过事件回圈(event loop)来实现并行操作。因此,我们要充分利用这一点,尽可能的避免阻塞操作,而多使用非阻塞操作。要实现非阻塞操作,我们需要使用回调函数,通过将函数作为参数传递给其它需要花时间处理的函数。

不得不说,像这样通过构建一个不太难但却是真正的实际应用,一步一步分析其所运用技术及其具体细节,最后构建出应用的方式,非常适合初学者的入门。通过《Node入门》这本书,相信你能快速的进入Node的奇妙世界。

最后,贴上《Node入门》这本书的中文网上地址和书中源码在Github上地址。

中文地址:http://www.nodebeginner.org/index-zh-cn.html

Github地址:https://github.com/ManuelKiessling/NodeBeginnerBook/tree/master/code/application

(完)

猜你喜欢

转载自phplaber.iteye.com/blog/1836780