Node.js 是一个采用C++语言编写的后端的 Javascript 的运行环境, 它使用了 google 的 V8虚拟机来解释和执行代码。Node.js 的有许多有用的内置的模块,比如 http, fs, events, querystring,url。当使用http 模块创建一个web server时,在IE 和 Firefox 浏览器下也是可以工作的。
 
所以 Node.js 事实上既是一个运行时环境,同时又是一个库。
 
Node.js采用  1.非阻塞;2.单线程;3.事件驱动
 
既然它是 单线程,为什么是非阻塞呢?
 
请看一个例子:
  var http = require('http');
 
  function sleep(millionseconds){
    var now = new Date();
    while((new Date()) - now < millionseconds);
  }
 
  function onRequest(request, response){
    var url = request.url;
    if(url.indexOf('sleep') > -1){
      sleep(5000);
    }
    response.write('Hello World');
    response.end();
  }
  http.createServer(onRequest).listen(8888);
 
然后在第1个窗口输入地址 http://localhost:8888/sleep 先不要打开它,在第2个窗口输入地址http://localhost:8888/test 也不要打开它。接着在第1个窗口按下回车,然后快速切换到第2个窗口也按下回车。发现2个页面都加载了 5 秒钟。
 
结论:/sleep 页面包含了阻塞的工作, 它阻塞了其它所有的处理工作。但是node 自己却说 “在node中除了代码,所有一切都是并行执行的”。 事实上,它是通过事件轮询(event loop)来实现并行,可以将函数通过参数传递来进行回调。下面一段话形象的描述了:
“嘿,probablyExpensiveFunction()(这里指的就是需要花时间处理的函数),你继续处理你的事情,我(Node.js线程)先不等你了,我继续去处理你后面的代码,请你提供一个callbackFunction(),等你处理完之后我会去调用该回调函数的,谢谢!”
 
 
下面实现一个如何用表单 post 数据和接受数据:
 
它有 2 个页面:
  首页(包含 form表单)  /index
  目标页(包含从表单处拿到的数据)  /result
 
用http 模块来创建一个 web server 对象,它的回调函数中有2个参数
 
request参数,通过  request.url 判断当前访问的是 /index 还是 /result 页面。 还可以监听 'data' 和 'end' 来判断数据正在传送过程还是传送结束。
  var postData= '';
  request.addListener('data', function(chunk){ 
    postData += postData + chunk;
    console.log('data delivery'); 
  });
  request.addListener('end', function(){
    response.write(postData);
    
    response.end();
  });
 
response 参数,通过设置 response.setHeader('content-type','text/html; charset=UTF-8'); 可以使传递的中文字符不是乱码。
 
在 /result  页面 通过querystring 模块来获取表单传送过来的值。
  var querystring = require("querystring");
  response.write(querystring.parse(postData).text); (text 是表单的name <input name='text' />)
  response.end();
 
------------------------------------------------------------
其知识点:
 
如何引用模块
  可以用 exports 来导出这个模块,比如 test.js 里 exports.foo = 1; exports.foo2 = function(){}, 当其它模块要使用test.js ,则 var test = require('test.js'); test.foo; test.foo2();
 
  如果 test.js 里没用 exports, 代码是: this.a = 1; this.b = 2; 那么 var test = require('test.js'); test.a; test.b;  相当于new 一个构造函数的意思。
 
事件流 events 模块
  var events = require("events"); 
  var emitter = new events.EventEmitter(); 
  emitter.on("myEvent", function(msg) { 
    console.log(msg); 
  }); 
  emitter.emit("myEvent", "Hello World.");
 
emitter 还有 once, addListener, removeListener 等事件。
 
文件系统 fs 模块
  fs.readFile 读取文件
  fs.unlink('test.js', function(){}) 删除文件
  fs.rename 重命名文件,当然同时还可以移动文件到其它目录。(类似于剪切的功能)
 
  同步的操作都是在方法后 加个Sync,比如 readFileSync, unlinkSync

Node.js 的初步理解的更多相关文章

  1. node.js module初步理解

    在开发一个复杂的应用程序的时候,我们需要把各个功能拆分.封装到不同的文件,在需要的时候引用该文件.没人会写一个几万行代码的文件,这样在可读性.复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组 ...

  2. node.js module初步理解-(转载)

    在开发一个复杂的应用程序的时候,我们需要把各个功能拆分.封装到不同的文件,在需要的时候引用该文件.没人会写一个几万行代码的文件,这样在可读性.复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组 ...

  3. NODE.JS exports require理解

    node.js exports 的作用是什么? 因为A.js文件想访问B.js文件中的类或函数,是不能直接访问的.为了解决这个问题 node.js 产生了 exports ,exports 实际可以理 ...

  4. Node.js之 EventLoop 理解(转)

    关于Node.js的第一个基本概念是I/O操作开销是巨大的: 所以,当前变成技术中最大的浪费来自于等待I/O操作的完成.有几种方法可以解决性能的影响: 同步方式:按次序一个一个的处理请求.利:简单:弊 ...

  5. Node.js学习(第一章:Node.js安装和模块化理解)

    Node.js安装和简单使用 安装方法 简单的安装方式是直接官网下载,然后本地安装即可.官网地址:nodejs.org Windows系统下,选择和系统版本匹配的.msi后缀的安装文件.Mac OS ...

  6. 深入理解Node.js基于事件驱动的回调

    回调和异步调用的关系 首先明确一点,回调并非是异步调用,回调是一种解决异步函数执行结果的处理方法.在异步调用,如果我们希望将执行的结果返回并且处理时,可以通过回调的方法解决.为了能够更好的区分回调和异 ...

  7. 《Node.js开发指南》的少许坑儿~

    由于express升级到3.0,造成这本书看起来more and more蛋疼.记录少许坑儿,方便后来人. 一.node.js在windows下的安装 书中在两处介绍了两种方式,其实现在的node.j ...

  8. Node.js : 我只需要一个店小二

    刚刚开始接触Node.js时, google了很多文章,但发现大部分都是泛泛的介绍安装,配置,以及介绍几个小例子 有一种雾里观花的感觉,所以非常困惑,不知道Node.js到底解决了什么问题,它的优势到 ...

  9. 10+ 最佳的 Node.js 教程和实例

    如果你正在找Node.js的学习资料及指南,那么请继续(阅读),我们的教程将会覆盖即时聊天应用.API服务编写.投票问卷应用.人物投票APP.社交授权. Node.js on Raspberry Pi ...

随机推荐

  1. 【 D3.js 入门系列 --- 3 】 做一个简单的图表!

    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...

  2. boost -- scoped_lock V.S. mutex lock/unlock —— why scoped_lock is recommanded?

    why scoped_lock is recommanded? 其实,这和RAII idiom变流行是一样的原因:因为你可以确保任何情况下离开执行范围都会解锁mutex. 注意,这不仅仅是说你可能忘记 ...

  3. 解决MVC中使用BundleConfig.RegisterBundles引用Css及js文件发布后丢失的问题

    ASP.NET MVC4,ASP.NET MVC5中对JS和CSS的引用又做了一次变化,在MVC3中我们这样引用资源文件: <link href="@Url.Content(" ...

  4. python检测字符串的字母

    python3判断字符串内是否含有字母,并打印字母出来 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- import re a = "8a2656 ...

  5. CSS 分组

    选择器分组 假设希望 h2 元素和段落都有灰色.为达到这个目的,最容易的做法是使用以下声明: h2, p {color:gray;} 将 h2 和 p 选择器放在规则左边,然后用逗号分隔,就定义了一个 ...

  6. [Linux] CentOS 加入开机启动

    1.在/etc/init.d/目录下新建一个文件:autostart.sh #!/bin/sh #chkconfig: 2345 80 80 #description: auto start web ...

  7. Windows性能查看器:系统的性能信息(I/O,IIS最大连接数,Sql) ,以及解决 asp.net IIS 一二百多用户并发

    在测试过程中,我们经常需要知道“系统的资源利用情况”来监测我们的测试执行情况,来查看测试环境是否有效,测试结果是否可信,或者是在无人值守时保存结果,等我们值班时再来分析. 1.在Windows环境下, ...

  8. 解决Linux性能问题的前60秒

    为了解决性能问题,你登入了一台Linux服务器,在最开始的一分钟内需要查看什么? 在Netflix我们有一个庞大的EC2 Linux集群,还有非常多的性能分析工具来监控和调查它的性能.其中包括用于云监 ...

  9. windowDialog销毁页面的问题

    [结贴] windowDialog销毁页面的问题 [复制链接]     Ghost丶 15 主题 91 帖子 200 积分 中级会员 积分 200 发消息 1# 电梯直达    发表于 2015-8- ...

  10. CRM HomePage.aspx

    //added by bgx on 20160616 //隐藏指定title按钮 function hideISVButton(buttonTitle) { var comps = document. ...