Nodejs

原创 2016年08月29日 16:33:22

node.js简介

Node.js采用C++语言编写而成,浏览器内核V8做为执行引擎;Node不是JS应用、而是一个Javascript的运行环境。Node保留了前端浏览器js的接口,没有改写语言本身的任何特性,依旧基于作用域和原型链。 Node.js 是一个为实时Web(Real-time Web)应用开发而诞生的平台,它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路,而采用了单线程、异步式I/O、事件驱动式的程序设计模型。这些特性不仅带来了巨大的性能提升,还减少了多线程程序设计的复杂性,进而提高了开发效率。

Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。

Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。

Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。

Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。

当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)
在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。

请记住:Node.js 从来不是用于解决大规模计算问题而创建的。它的出现是为了解决大规模I/O 的问题,并且在这一点上做的非常好。

stream

通过nodejs实现,读取一个文件里面的内容并写入到另一个文件中

var fs = require('fs');
//创建一个可读流
var readerStream = fs.createReadStream('input.txt');
//创建一个可写流
var writerStream = fs.createWriteStream('output.txt');

//管道读写操作
//读取input.txt中的内容输出到output.txt中
readerStream.pipe(writerStream)

node中的模块引用

//hello.js
function Hello(){
    var name;
    this.setName = funciton(thyName){
            name = thyName;
    };
    this.sayHello = function(){
            console.log('Hello'+name);
    };
};
module.exports = Hello;

这样就可以在其他模块中引用hello.js

//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('Yang');
hello.sayHello();

util

util 是node.js的一个核心模块,提供常用函数的集合,用于弥补核心JavaScript的功能过于精简的不足。

  • util.inherits
var util = require('util'); 
function Base() { 
    this.name = 'base'; 
    this.base = 1991; 
    this.sayHello = function() { 
    console.log('Hello ' + this.name); 
    }; 
} 
Base.prototype.showName = function() { 
    console.log(this.name);
}; 
function Sub() { 
    this.name = 'sub'; 
} 
util.inherits(Sub, Base); 
var objBase = new Base(); 
objBase.showName(); 
objBase.sayHello(); 
console.log(objBase); 
var objSub = new Sub(); 
objSub.showName(); 
//objSub.sayHello(); 
console.log(objSub); 

输出:

base 
Hello base 
{ name: 'base', base: 1991, sayHello: [Function] } 
sub 
{ name: 'sub' }

上述代码中,我们定义了一个Base函数和一个继承自Base的Sub函数,通过util.inherits() 来实现继承。

注意:Sub只继承了Base()在原型中定义的函数,Base函数中的base,sayHello属性并没继承。同时,在原型中定义的属性不会被console.log 作 为对象的属性输出。

  • util.inspect
    util.inspect(object,[showHidden],[depth],[colors])是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。
    showHidden 是一个可选参数,如果值为 true,将会输出更多隐藏信息。
    depth 表示最大递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多 少。如果不指定depth,默认会递归2层,指定为 null 表示将不限递归层数完整遍历对象。 如果color 值为 true,输出格式将会以ANSI 颜色编码,通常用于在终端显示更漂亮 的效果。
    特别要指出的是,util.inspect 并不会简单地直接把对象转换为字符串,即使该对 象定义了toString 方法也不会调用。

  • util.isArray(object)
    如果给定的参数“object”是一个数组返回true,否则返回false。

  • util.isRegExp(object)
    如果给定的参数是一个正则表达式返回true,否者false。

  • util.isDate(object)
    如果给定的参数是日期返回的是true,否则false。

  • util.isError(object)
    如果给定的参数是一个错误的对象返回true,否则false。

node.js文件系统

node.js提供一组类似UNIX(POSIX)标准的文件操作API。Node导入文件系统模块(fs)语法如下:

var fs = require('fs');
  • 异步和同步
    Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
    建议大家是用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

  • 打开文件
    fs.open(path,flags{,mode},callback);
    flags - 文件打开的行为。
    mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。

  • 获取文件信息
    通过异步模式获取文件信息的语法格式:
fs.stat(path,callback)

callback-回调函数,带有两个参数:(err,stats),stats是fs.Stats对象。

  • 写入文件
fs.writeFile(filename,data[,options],callback)

data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(流) 对象。
options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’

  • 读取文件
fs.read(fd,buffer,offset,length,position,callback)

fd - 通过 fs.open() 方法返回的文件描述符。
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
- 关闭文件

fs.close(fd,callback);

fd - 通过 fs.open() 方法返回的文件描述符。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

nodejs+express搭建自己的框架

  • 2017年11月19日 20:18
  • 2KB
  • 下载

如何使用nodeJS搭建http服务器

作者本身也是刚接触nodejs,所以在知识面方面还存在很多漏洞。         nodejs下载地址:http://nodejs.org/        在Window下面安装的...

nodejs深入浅出

  • 2017年10月30日 16:20
  • 44.53MB
  • 下载

Nodejs&Express; 讲座

  • 2017年10月29日 20:06
  • 68B
  • 下载

NodeJs安装与配置淘宝镜像

1. 安装:https://nodejs.org/en/,一般下载安装最新稳定版本2. 配置2.1 查看安装结果与版本 node -v #查看安装版本 npm -v #查看npm安装版本...
  • Ronux
  • Ronux
  • 2016年12月27日 15:25
  • 5273

nodejs聊天室

  • 2017年10月19日 20:27
  • 3.16MB
  • 下载

nodejs iconv-lite模块

  • 2017年09月22日 18:46
  • 231KB
  • 下载

深入剖析Nodejs的异步IO

前言:Nodejs最赖以自豪的优势莫过于“单线程实现异步IO”了,也许你仍然丈二和尚摸不着头脑,Nodejs自我标榜是单线程,还能实现异步IO操作,这两者难道不是相互矛盾的么?葫芦里到底藏着什么药? ...

NodeJS视频教程

  • 2017年11月08日 13:47
  • 48B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Nodejs
举报原因:
原因补充:

(最多只允许输入30个字)