nodejs基础知识

1.第一个应用:

    demo.js

2.使用npm命令安装模块:
全局安装:
npm install express -g

            1. 将安装包放在 /usr/local 下。
            2. 可以直接在命令行里使用。
            3. 不能通过 require() 来引入本地安装的包。

接下来我们使用全局方式安装 express
本地安装:
npm install express

            1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。

            2. 可以通过 require() 来引入本地安装的包。

3.Node.js回调函数
Node.js 异步编程的直接体现就是回调。

    异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。

    回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有API都支持回调函数。

4.Node.js事件循环
整个事件驱动的流程就是这么实现的,非常简洁。有点类似于观察者模式,事件相当于一个主题(Subject),而所有注册到这个事件上的处理函数相当于观察者(Observer)。

    Node.js 有多个内置的事件,我们可以通过引入 events 模块,并通过实例化 EventEmitter 类来绑定和监听事件,如下实例:

    // 引入 events 模块
    var events = require('events');
    // 创建 eventEmitter 对象
    var eventEmitter = new events.EventEmitter();
     
    // 创建事件处理程序
    var connectHandler = function connected() {
       console.log('连接成功。');
      
       // 触发 data_received 事件 
       eventEmitter.emit('data_received');
    }
     
    // 绑定 connection 事件处理程序
    eventEmitter.on('connection', connectHandler);
     
    // 使用匿名函数绑定 data_received 事件
    eventEmitter.on('data_received', function(){
       console.log('数据接收成功。');
    });
     
    // 触发 connection 事件 
    eventEmitter.emit('connection');
     
    console.log("程序执行完毕。");

5.Node.js EventEmitter
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。

    Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, 一个fs.readStream对象会在文件被打开的时候发出一个事件。 所有这些产生事件的对象都是 events.EventEmitter 的实例。

1.加载模块
加载核心模块只能通过模块名引用
可以通过绝对路径加载非核心模块
加载文件夹模块:
文件夹中不存在package.json文件,那么包的 入口点会嘉定为默认值index.js
如果存在,node就会尝试解析该文件并查找main属性,将main属性当做入口点的相对路径
如果一个模块名既不是相对路径,也不是核心模块,node会在当前目录的node_modules文件夹中查找该模块,如果找不到则往父级的文件夹node_modules中中查找

var module = require("module_name")

2.导出模块

module.exports = func

3.缓存模块
模块在首次加载会被缓存起来

4.创建缓冲区
使用utf-8创建

    var buf = new Buffer('hello world');

    指定编码格式:
    var buf = new Buffer('hello world','base64');

    指定长度
    var buf = new Buffer(1024);

5.在缓冲区上获取和设置数据

    var buf = new Buffer('hello world');

    console.log(buf[3]);// ->108 

    buf[99] = 125 //设置数据

    console.log(buf.length);//获取长度

    var buf = new Buffer(100);//迭代内容并设置每个字节
    for (var i =0; i <buf.length; i++){

            buf[i] = i
    };

6.切分缓冲区:可以通过指定起始位置和结束位置来切分缓冲区,从而创建一个更小的缓冲区

    var buf = new Buffer('this is the content of my buffer');
    var smallerBuffer = buf.slice(8,19)
    console.log(smallerBuffer.toString()); //the content

    并没有创建新的内存,只是对父缓冲区的引用

7.复制缓冲区
var buf1 = new Buffer('this is the content of my buffer');
var buf2 = new BUffer(11);
buf1.copy(buf2,0,8,19)
console.log(buf2.toString()); //the content
8.缓冲区解码
utf-8:
var str = buf.toString();
指定方式:
var str = buf.toString( "base64");

    toString方法转换格式:
    var buf1 = new Buffer('this is the content of my buffer');
    var base64String = buf.toString('base64')

9.标准回调模式:
var fs = require('fs')
fs.readFile('./index.js', function(err,fileContent){
if (err) {

                    throw err
            }
    console.log('fileContent',fileContent.toString());


    });

10.事件发射器模式
事件发射器就是可以发射事件的对象,而事件监听器则是可以绑定到事件发射器上的代码,负责监听特定类型的事件
var req = http.request(option,function(response){

    response.on("data",function(data){

            console.log("some ...");



                    });
                    response.on("end",function(){

                            console.log("response ended");
                    });


            });
            req.end();

猜你喜欢

转载自www.cnblogs.com/lalavender/p/10436577.html