nodejs基本汇总

安装配置

直接下载安装包https://nodejs.org/en/download/进行安装即可

回调函数、事件循环

function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }

EventEmitter

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

模块系统

分为多函数和一个函数的js模块

函数

在JavaScript中,一个函数可以作为另一个函数的参数。我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数。


路由、GET/POST请求、Web 模块


文件系统、Buffer(缓冲区) 、Stream(流)


本文转自:https://www.runoob.com/nodejs/nodejs-tutorial.html
新加评论 评论标题:

文章评论

    文件系统的主要代码

        2018-08-16    
    修改 删除
    //fs读取文件
    var fs = require("fs");
    // 异步读取
    fs.readFile('input.txt', function (err, data) {
       if (err) {
           return console.error(err);
       }
       console.log("异步读取: " + data.toString());
    });
    // 同步读取
    var data = fs.readFileSync('input.txt');
    console.log("同步读取: " + data.toString());
    console.log("程序执行完毕。");
    
    //fs写入文件,异步模式
    var fs = require("fs");
    console.log("准备写入文件");
    fs.writeFile('input.txt', '我是通 过fs.writeFile 写入文件的内容',  function(err) {
       if (err) {
           return console.error(err);
       }
       console.log("数据写入成功!");
       console.log("--------我是分割线-------------")
       console.log("读取写入的数据!");
       fs.readFile('input.txt', function (err, data) {
          if (err) {
             return console.error(err);
          }
          console.log("异步读取文件数据: " + data.toString());
       });
    });
    
    //buf的创建
    // 创建一个长度为 10、且用 0 填充的 Buffer。
    const buf1 = Buffer.alloc(10);
    // 创建一个长度为 10、且用 0x1 填充的 Buffer。 
    const buf2 = Buffer.alloc(10, 1);
    // 创建一个长度为 10、且未初始化的 Buffer。
    // 这个方法比调用 Buffer.alloc() 更快,
    // 但返回的 Buffer 实例可能包含旧数据,
    // 因此需要使用 fill() 或 write() 重写。
    const buf3 = Buffer.allocUnsafe(10);
    // 创建一个包含 [0x1, 0x2, 0x3] 的 Buffer。
    const buf4 = Buffer.from([1, 2, 3]);
    // 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
    const buf5 = Buffer.from('tést');
    // 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
    const buf6 = Buffer.from('tést', 'latin1');
    console.log(buf6);
    buf = Buffer.alloc(256);
    len = buf.write("www.runoob.com");
    console.log("写入字节数 : "+  len);
    console.log(buf);
    console.log(buf.toString());
    buf = Buffer.alloc(26);
    for (var i = 0 ; i < 26 ; i++) {
      buf[i] = i + 97;
    }
    console.log( buf.toString('ascii'));       // 输出: abcdefghijklmnopqrstuvwxyz
    console.log( buf.toString('ascii',0,5));   // 输出: abcde
    console.log( buf.toString('utf8',0,5));    // 输出: abcde
    console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 编码, 并输出: abcde
    
    //读文件,并处理流事件
    var fs = require("fs");
    var data = '';
    // 创建可读流
    var readerStream = fs.createReadStream('input.txt');
    // 设置编码为 utf8。
    readerStream.setEncoding('UTF8');
    // 处理流事件 --> data, end, and error
    readerStream.on('data', function(chunk) {
       data += chunk;
    });
    readerStream.on('end',function(){
       console.log(data);
    });
    readerStream.on('error', function(err){
       console.log(err.stack);
    });
    console.log("程序执行完毕");
    
    //写入文件
    var fs = require("fs");
    var data = '菜鸟教程官网地址:www.runoob.com';
    // 创建一个可以写入的流,写入到文件 output.txt 中
    var writerStream = fs.createWriteStream('input.txt');
    // 使用 utf8 编码写入数据
    writerStream.write(data,'UTF8');
    // 标记文件末尾
    writerStream.end();
    // 处理流事件 --> data, end, and error
    writerStream.on('finish', function() {
        console.log("写入完成。");
    });
    writerStream.on('error', function(err){
       console.log(err.stack);
    });
    console.log("程序执行完毕");
    
    //通过管道复制文件
    var fs = require("fs");
    // 创建一个可读流
    var readerStream = fs.createReadStream('input.txt');
    // 创建一个可写流
    var writerStream = fs.createWriteStream('output.txt');
    // 管道读写操作
    // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
    readerStream.pipe(writerStream);
    console.log("程序执行完毕");
    
    //文件压缩与解压
    var fs = require("fs");
    var zlib = require('zlib');
    // 压缩 input.txt 文件为 input.txt.gz
    fs.createReadStream('input.txt')
      .pipe(zlib.createGzip())
      .pipe(fs.createWriteStream('input.txt.gz'));
    console.log("文件压缩完成。");
    
    var fs = require("fs");
    var zlib = require('zlib');
    // 解压 input.txt.gz 文件为 input.txt
    fs.createReadStream('input.txt.gz')
      .pipe(zlib.createGunzip())
      .pipe(fs.createWriteStream('input.txt'));
    console.log("文件解压完成。");

    EventEmitter实例

        2018-08-16    
    修改 删除
    //emitter的基本使用
    // 引入 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("程序执行完毕。");
    //设置事件启动的时间
    setTimeout(function() { 
        event.emit('connection'); 
    }, 1000); 
    
    //同名的事件同时触发
    var events = require('events'); 
    var emitter = new events.EventEmitter(); 
    emitter.on('someEvent', function(arg1, arg2) { 
        console.log('listener1', arg1, arg2); 
    }); 
    emitter.on('someEvent', function(arg1, arg2) { 
        console.log('listener2', arg1, arg2); 
    }); 
    emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); 
    
    //emitter的多种方法
    var events = require('events');
    var eventEmitter = new events.EventEmitter();
    // 监听器 #1
    var listener1 = function listener1() {
       console.log('监听器 listener1 执行。');
    }
    // 监听器 #2
    var listener2 = function listener2() {
      console.log('监听器 listener2 执行。');
    }
    // 绑定 connection 事件,处理函数为 listener1 
    eventEmitter.addListener('connection', listener1);
    // 绑定 connection 事件,处理函数为 listener2
    eventEmitter.on('connection', listener2);
    var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
    console.log(eventListeners + " 个监听器监听连接事件。");
    // 处理 connection 事件 
    eventEmitter.emit('connection');
    // 移除监绑定的 listener1 函数
    eventEmitter.removeListener('connection', listener1);
    console.log("listener1 不再受监听。");
    // 触发连接事件
    eventEmitter.emit('connection');
    eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
    console.log(eventListeners + " 个监听器监听连接事件。");
    console.log("程序执行完毕。");

    模块系统实例

        2018-08-16    
    修改 删除
    //同一个js文件中定义多个函数组成的模块,文件名为main.js
    exports.input=function(){
    	var fs = require("fs");
    
    	var data = fs.readFileSync('input.txt');
    
    	console.log(data.toString());
    	console.log("程序执行结束!");
    }
    exports.say=function(){
    	console.log("你好!");
    }  //在其他文件中,通过require引用,然后通过.调用相关函数
    var Hello = require('./main');
    Hello.say();
    
    
    //一个js文件只有一个函数,文件名为hello.js
    function Hello() { 
        var name; 
        this.setName = function(thyName) { 
            name = thyName; 
        }; 
        this.sayHello = function() { 
            console.log('Hello ' + name); 
        }; 
    }; 
    module.exports = Hello;
    
    //可以直接获得这个对象:
    var Hello = require('./hello');
    hello = new Hello(); //对象本身
    hello.setName('BYVoid'); 
    hello.sayHello(); 

    http模块代码

        2018-08-16    
    修改 删除
    //最基本的http模块
    var http = require('http');
    http.createServer(function (request, response) {
        // 发送 HTTP 头部 
        // HTTP 状态值: 200 : OK
        // 内容类型: text/plain
        response.writeHead(200, {'Content-Type': 'text/plain'});
        // 发送响应数据 "Hello World"
        response.end('Hello World\n');
    }).listen(8888);
    // 终端打印如下信息
    console.log('Server running at http://127.0.0.1:8888/');
    
    //在http请求中添加路由数据处理 包含index.js,router.js,server.js三个文件
    //index.js
    var server = require("./server");
    var router = require("./router");
    server.start(router.route);
    
    //router.js
    function route(pathname) {
      console.log("About to route a request for " + pathname);
    }
    exports.route = route;
    
    //server.js
    var http = require("http");
    var url = require("url");
    function start(route) {
      function onRequest(request, response) {
        var pathname = url.parse(request.url).pathname;
        console.log("Request for " + pathname + " received.");
     
        route(pathname);
     
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.write("Hello World");
        response.end();
      }
      http.createServer(onRequest).listen(8888);
      console.log("Server has started.");
    }
    exports.start = start;
安装配置
回调函数、事件循环
EvetEmitter
模块系统
函数
路由、GETPOST请求、Web模块
文件系统、Buffer(缓冲区)、Strem(流)
评论列表
文件系统的主要代码
EventEmitter实例
模块系统实例
http模块代码