了不起的Node.js 5/16

Chapter 1

安装

1.Node.js的设计理念之一,只维护较少量的依赖,这使得安装node.js变得非常简单。

2.执行文件console.log没问题,但是node执行http静态服务器的时候卡死

var http = require('http');
var serv = http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type':'text/html'});
    res.end('<marquee>Smashing Node!</marquee> ');
});
serv.listen(3000);

经过了问别人以及问群里的大佬,发现又是个傻屌问题,我太蠢了,总是犯这种低级错误,就跟之前的变量写错名字之类的问题。

 这样不动是正常的,需要自己去浏览器访问,根据设置的端口,后面一开始以为自己的端口是3030刷新了半天,结果发现写的是3000

 成功的响应。

3.NPM (包管理器)

Chapter 2

JS概述

1.call ,aply , bind的区别,都是改变函数内部this的指向, call接受参数列表,apply接受一个参数数组,bind返回的是一个函数,必须再调用bind(s)()。

Chapter 3

阻塞与非阻塞IO

能力越大,责任也就越大。始终牢记这点对书写出健壮的Node.Js程序,避免运行时出错是非常重要的。

//PHP
print('Hello');
sleep(5);
print('World');
//node
console.log('hello');
setTimeout(function(){
    console.log('World');
},5000);

第一个php的例子,sleep()阻塞了线程的执行。程序进入睡眠时,就什么事都不做了。

而node使用了事件轮询,因此这里setTimeout是非阻塞的。就假如在setTimeout的后面加个console.log('bye')的语句,会立即执行,结果如下

Chapter 4 

Node中的JavaScript

1.在浏览器中,全局对象指的就是window对象。在window对象上定义的任何内容都可以被全局访问到。比如,setTimeout其实就是window.setTimeout,document其实就是window.document。

2.Node中有两个类似但却各自代表着不同含义的对象,如下所示。

  global:和window一样,任何global对象上的属性都可以被全局访问到。

  process:所有全局执行上下文的内容都在process对象中。在浏览器中,只有一个window对象,在node中,也只有一个process对象。举例来说,浏览器中窗口的名字是window.name,类似的,node中进程的名字是process.title。

3.模块系统,三个核心的全局对象:require,module,exports。

//module_a.js
console.log('this is a');
//module_b.js
console.log('this is b');
//main.js
require('module_a');
require('module_b');

这样会报错,node找不到,因为他们没有通过npm来安装,也不再node_modules目录中,而且node自带模块中没有以此为名的模块。

 解决办法:在require参数前面加./,当前路径下

 4.默认情况下,每个模块都会暴露一个空对象,如果想在该对象上添加属性,那么简单地使用exports即可;

//module.c
exports.name = 'john';
exports.data = 'this is some data';
var privateVariable = 5;
exports.getPrivate = function() {
    return privateVariable;
};
//index.js
var a = require('./module_c');
console.log(a.name);
console.log(a.data);
console.log(a.getPrivate);

Chapter 5

命令行工具(CLI)以及FS API:首个Node应用

猜你喜欢

转载自www.cnblogs.com/ljg1998/p/12627488.html
今日推荐