node

  • 在javascript有且仅有一个全局对象,在浏览器中,叫window对象。
  • 在node.js中,也有且仅有一个全局对象,叫global
  • process也是Node.js提供的一个对象,它代表当前Node.js进程。
  • node 是由事件驱动执行的单线程模型,不断执行事件响应
  • 想在下一次事件响应中执行代码,可以调用
    process.nextTick(function(){})
  • Node.js进程本身的事件就由process对象来处理。如果我们响应exit事件,就可以在程序即将退出时执行某个回调函数
    process.on('exit', function(){})
    有很多JavaScript代码既能在浏览器中执行,也能在Node环境执行,但有些时候,程序本身需要判断自己到底是在什么环境下执行的,常用的方式就是根据浏览器和Node环境提供的全局变量名称来判断:
1. if (typeof(window) === 'undefined') {
2.     console.log('node.js');
3. } else {
4.     console.log('browser');
5. }
  • Node.js内置的fs模块就是文件系统模块,负责读写文件。和所有其它JavaScript模块不同的是,fs模块同时提供了异步和同步的方法
  • 同步读取的函数和异步函数相比,多了一个Sync后缀,并且不接收回调函数,函数直接返回结果。如果同步读取文件发生错误,则需要用try...catch捕获该错误。
  • 如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息
  • 服务器启动时如果需要读取配置文件,或者结束时需要写入到状态文件时,可以使用同步代码,因为这些代码只在启动和结束时执行一次,不影响服务器正常运行时的异步执行
  • stream: 在Node.js中,流也是一个对象,我们只需要响应流的事件就可以了:data事件表示流的数据已经可以读取了,end事件表示这个流已经到末尾了,没有数据可以读取了,error事件表示出错了。
  • 就像可以把两个水管串成一个更长的水管一样,两个流也可以串起来。一个Readable流和一个Writable流串起来后,所有的数据自动从Readable流进入Writable流,这种操作叫pipe.在Node.js中,Readable流有一个pipe()方法,就是用来干这件事的。
  • 让我们用pipe()把一个文件流和另一个文件流串起来,这样源文件的所有数据就自动写入到目标文件里了,所以,这实际上是一个复制文件的程序
1. 'use strict';
2. var fs = require('fs');
3. var rs = fs.createReadStream('sample.txt');
4. var ws = fs.createWriteStream('copied.txt');
5. rs.pipe(ws);
  • 默认情况下,当Readable流的数据读取完毕,end事件触发后,将自动关闭Writable流。如果我们不希望自动关闭Writable流,需要传入参数:
    readable.pipe(writable, { end: false });
HTTP服务器
  • 要开发HTTP服务器程序,从头处理TCP连接,解析HTTP是不现实的。这些工作实际上已经由Node.js自带的http模块完成了。应用程序并不直接和HTTP协议打交道,而是操作http模块提供的request和response对象。
  • request对象封装了HTTP请求,我们调用request对象的属性和方法就可以拿到所有HTTP请求的信息;
  • response对象封装了HTTP响应,我们操作response对象的方法,就可以把HTTP响应返回给浏览器
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 8,986评论 2 41
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 9,523评论 2 58
  • stream 流是一个抽象接口,在 Node 里被不同的对象实现。例如 request to an HTTP se...
    明明三省阅读 8,692评论 1 10
  • 模块化公布自己的模块功能. 其他模块调用另外的模块. 公布方法 如果要输出一个键值对象{},可以利用exports...
    httIsHere阅读 3,480评论 0 0
  • 没错,傻瓜就是我,和我的闺蜜… 此文目的在于以我们的教训告诫各位朋友,江湖多险恶,纵然害人之心不可有,但防人之心不...
    王姑娘啊阅读 3,991评论 3 0