Yang'blog

走在攻城狮的路上。。

Nodejs

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() 方法返回的文件描述符。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31411389/article/details/52354345
文章标签: nodejs
个人分类: nodejs
上一篇package.json
下一篇node.js中创建服务器与路由构建
想对作者说点什么? 我来说一句

深入浅出nodejs

2017年09月03日 44.64MB 下载

NodeJS开发指南高清版

2017年10月27日 9.69MB 下载

NodeJS 安装包

2018年02月13日 15.7MB 下载

nodejs 实战

2017年10月26日 19.02MB 下载

五子棋 nodejs

2018年01月08日 369KB 下载

七天学会nodejs

2017年11月01日 72KB 下载

nodejs上传下载管理文件

2018年04月06日 599KB 下载

windows64 位最新nodejs

2017年11月04日 15.86MB 下载

NodeJs高级编程英文版

2018年01月23日 6.72MB 下载

Nodejs实战源码

2017年11月28日 9.81MB 下载

没有更多推荐了,返回首页

关闭
关闭