分类 Node.js 下的文章

《Node.js 硬实战》笔记


这是看《Node.js 硬实战》写的第一个 demo

// stream.js
const Writable = require('stream').Writable;
const util = require('util');

module.exports = class MyStream extends Writable {
    constructor(matchText, options) {
        super();
        this.count = 0;
        this.matcher = new RegExp(matchText, 'ig');
    }

    write(chunk, encoding, cb) {
        let matches = chunk.toString().match(this.matcher);
        if (matches) {
            this.count += matches.length;
        }
        if (cb) {
            cb();
        }
    }

    end() {
        this.emit('total', this.count);
    }
}

上面的代码写了什么?

  • require 方法导入了 Node.js 的两个核心模块:stream、util。
  • module.exports 导出 MyStream 类。
    • MyStream 类继承了 Writable 类。
    • 覆盖了父类 Writable 的两个方法 _write()end()
//  index.js
const MyStream = require('./stream');
const http = require('http');

let myStream = new MyStream('node.js');

http.get('http://chenzhongtao.cn', function (res) {
    res.pipe(myStream);
})

myStream.on('total', function (count) {
    console.log('test:', count);
})

那这个呢,写了什么?

  • 同样的用 require 方法导入模块,其中 MyStream 是我自己写的模块。

  • 然后我创建了 MyStream 类的实例,并传入字符串 node.js 初始化了该实例。

  • 调用 httpget() 方法,发送一个 GET 请求,返回结果丢给 myStream

  • 最后给 myStream 注册一个是事件 total,触发该事件会调用 on 方法的第二个参数,这个参数是个回调函数。

  • 代码


Node.js 笔记


Node.js 简介

Nodejs 是什么?

Node.js 不是一种独立的语言,也不是一个 JavaScript 框架,更不是浏览器的库。Node.js 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 跟 PHP 、Python 等脚本语言一样可以作为后端语言。

Node.js 能干嘛

Node.js 适合那种高并发的应用场景,比如 即时聊天程序。因为 Node.js 内置了 HTTP 服务器的支持。也就是说不用像 PHP 等其他后端语言一样,还要通过 Apache 服务器等,直接几行代码,在V8引擎上一跑,一个简单的服务器就搭建好了。

异步式 I/O 与事件驱动

这是 Node.js 最大的特性了。传统架构应对高并发的方案是多线程并行。而 Node.js 使用的是单线程模型,它在执行过程中有一个事件队列,当程序执行到耗时长的 I/O 请求时,不会说一直等待,而是执行其他操作,等该 I/O 请求完成后,利用事件循环再次调出来执行。

举个例子

let fs = require('fs')
fs.readFile('./Git.md', 'utf-8', (err, data) => {
        if (err) {
            throw err
        }
        console.log(data)
    }
)
console.log('hhhh')

执行结果是,先看到打印的 hhhh ,然后才是读取文件 Git.md 的内容。这是因为 fs.readFile() 它是异步执行的。

参考资料

  • Node.js 开发指南

File System 笔记


File System

File System 是文件的读写操作。这个模块是由 标准的POSIX 封装形成的。怎么使用,直接导入该模块: require('fs')

大部分方法都有两种,异步执行和同步执行。

读取文件

  • fs.readFile('file'[,'options'],'callback');
  • fs.readFileSync('file'[,'options']);
const fs = require('fs');
fs.readFile('./readme.md', 'utf-8', (err, data) => {
    if (err) {
        throw err;
    }
    console.log(data);
})

console.log(fs.readFileSync('./readme.md', 'utf8'));

上面那段代码是都是读取文件的方法,只是执行方式不一样,前者为异步执行所以有回调函数(callback),后者则为同步执行。


ubuntu后台执行node


我们用ssh远程登录,打开的node服务,只要我们终端关闭,就会出现node服务被杀死的情况。这是因为Linux的自身机制,如果要解决这个在后台运行的问题,可以有如下方法

  • 使用nohup命令
    sudo nohup node ./bin/www &
    &这个是代表放在后台运行
    如果上面的命令行运行成功了,你使用jobs命令显示出当前后台运行的进程
  • 修改/etc/rc.d/rc.local文件
    把要执行的命令写入这个文件。因为这个文件是开机启动项,每次开机的时候,系统会去touch它然后会执行这些命令行。
  • 使用系统定时任务,让系统在指定时间执行某个后台任务

上面三种方法来自慕课网 Linux教程


Ubuntu安装Node.js


官方文档:这里

  1. 稳定版 node.js v6.10.3 + npm 3.10.10
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

我安装的时候,打第二个命令行,出现 [working 0%] 我就强制 stop
然后再次打sudo apt-get install -y nodejs 就说我要手动配置 我跟着打就ok啦
安装成功的话
node -v 出现 v6.10.3
npm -v 出现 3.10.10

  1. 最新的版本8.0
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs