前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >读书笔记-《了不起的node.js》-3

读书笔记-《了不起的node.js》-3

作者头像
用户3258338
发布2019-07-19 17:02:48
5680
发布2019-07-19 17:02:48
举报

完成今天的小目标是实现梦想的利器

《如何想到又做到》有感

我们老家冬天的一道风景~

阻塞与非阻塞IO

区分以下PHP代码和Node代码有什么不同:

代码语言:javascript
复制
 // PHP
 print('Hello');
 sleep(5);
 print('world')
代码语言:javascript
复制
// Node
console.log('Hello');
setTimeout(function(){
  console.log('world');
},5000)

区别:

PHP中当遇到sleep时程序会阻塞住,在阻塞设定时间之前,不会有任何操作,也就是说是同步的;

Node使用了事件轮询,本质上Node会先注册事件,随后不停的询问内核这些事件是否已经分发。当事件分发时,回调函数就会被触发,然后继续执行下去;如果没有事件触发,则继续执行其他代码;setTimeout只是注册了一个事件,程序继续运行,也就是说是异步的。事实上node.js是单线程、异步的。

Node中的js

global对象

  • global:相当于浏览器中的window对象,全局都能被访问到;
  • process: 所有全局上下文中的内容都在process对象中
  • console : console.log 、console.error

模块系统

关于模块系统,主要有三个API:require、module、 exports;

require:用于模块的引用

代码语言:javascript
复制
require('colors');

以上是绝对模块,是指能在node_modules查找到,或者node内置的模块(例如fs);

代码语言:javascript
复制
require('./module_abc');

以上的相对模块,这是指通过相对路径引用模块;

要想模块能被require(引用),模块必须被导出,就得用到module和exports;

代码语言:javascript
复制
// module_abc.js
exports.name = "zhangsan";
exports.age = "13";

上述这样模块就被导出了,接下来进行引用:

代码语言:javascript
复制
// use_require.js
var abc = require('./module_abc');
console.log(abc.name);
console.log(abc.age);

module.exports:

代码语言:javascript
复制
// module.exports 
module.exports = Person;
function Person(name){
  this.name = name;
};
Person.prototype.say = function(){
  console.log('我的名字是'+ this.name);
}
代码语言:javascript
复制
// use_require.js
var abc = require('./module_abc');
console.log(abc.name);
console.log(abc.age);

var Person = require('./module_exports');
console.log("Person",Person);
var Lin = new Person('Lin');
Lin.say();

在终端执行结果如下:

事件

举个提交例子:

代码语言:javascript
复制
http.Server(function(req,res){
  var reqData = '';
  req.on('data',function(){
    buf += data;
  };
  req.on('end',function(){
    console.log("数据接受完成");
  })
})

Buffer

Buffer是node.js提供了用于TCP流、文件系统、以及其他上下文中与八进制流进行交互的方法。

Buffer类在全局作用域中,所以不用引用。在 6.0.0 之前的 Node.js 版本中,Buffer 实例是使用 Buffer构造函数创建的;为了使 Buffer 实例的创建更可靠且更不容易出错,各种形式的 new Buffer()构造函数都已被弃用,且改为单Buffer.from()Buffer.alloc()Buffer.allocUnsafe() 方法。

当字符串数据被存储入 Buffer 实例或从 Buffer 实例中被提取时,可以指定一个字符编码。

代码语言:javascript
复制
const buf = Buffer.from('hello world', 'ascii');
console.log(buf.toString('hex'));
// 打印: 68656c6c6f20776f726c64
console.log(buf.toString('base64'));
// 打印: aGVsbG8gd29ybGQ=

到这里我们应该清楚了node.js的安装和一些基本概念了,下一次我们就要一起学习Node重要的API。

其实由于这本书出版的比较早而且讲的都是很基础的,所以希望宝宝们还是要多多参考最新的文档哦!下面的链接就是文档地址。电子版的文档是真的好、更新快。不像纸质版的出版了就是出版了,更新不能同步,所以宝宝们要学习看电子的书和文档哦!

啰嗦太多了,一起加油吧,一起找适合自己的学习方法,做一个勤奋,有方法的笨鸟!

参考文档:http://nodejs.cn/api/buffer.html

愿我们有能力不向生活缴械投降---Lin

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 女程序员的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档