http模块

var http = require('http');                                     // 引入http模块
var url = require('url');                                       // 引入url模块
var querystring = require('querystring');                       // 引入查询字符串模块
http.createServer(function (request, response) {                // 创建http服务
    response.writeHead(200, {'Content-Type': 'text/plain'});    // 发送响应头部
    var parseObj = url.parse(req.url, true)                     // 解析URL(get请求)
    var parseObj = querystring.parse(body);                     // 解析URL参数(post请求)
    response.write("'<h4>Hello World</h4>\n'")                  // 发送响应主体
    response.end();                                             // 结束响应
})

events事件模块

var events = require('events');                         // 引入事件模块
var evEmit = new events.EventEmitter();                 // 创建事件对象

实例方法

evEmit.on("事件名", connectHandler(参数1,参数2...));    // 绑定事件
evEmit.once("事件名", connectHandler);                 // 单次绑定事件
evEmit.removeListener("事件名", connectHandler);       // 移除事件
evEmit.removeAllListeners(### event);                 // 移除所有事件
evEmit.emit("事件名",参数1,参数2..);                    // 触发事件
evEmit.setMaxListeners(n);                            // 设置绑定默认数量
evEmit.listeners(### event);                          // 返回监听器(函数)数组

模块方法

evEmit.listenerCount("事件名");      // 返回指定事件的监听器数量

事件

evEmit.on("newListener", connectHandler(事件名称,回调));      

// 该事件在添加常规事件时触发

// newListener回调中任何额外的被注册到相同名称的监听器会在监听器被添加之前被插入
evEmit.on("error", connectHandler(错误对象));

// 如果EventEmitter没有为error事件注册至少一个监听器,当error事件触发时,会抛出错误、打印堆栈跟踪、且退出 Node.js 进程,因此最佳实践是应该始终为error事件注册监听器

Buffer缓冲区

var buf = new Buffer(256);                    // 创建缓冲实例

写入缓冲区

buf.write("字符",起始索引,字节长度,编码类型)      // 返回buf实际能够写入的长度

读取缓冲区

buf.toString(编码类型,起始索引,结束位置)          // 返回解码字符串

Buffer转JSON

buf.toJSON()                                  // 返回json对象

缓冲区合并

Buffer.concat(buf数组,合并长度)                // 返回合并后的buf对象

缓冲区比较

Buffer.compare(buf1,buf2)                    // 返回一个数字(buf1在buf2之前,之后或相同)
buf1.compare(buf2)                           // ...

拷贝缓冲区

sourceBuf.copy(targetBuf,targetStart,sourceStart,sourceEnd)

// 无返回值
// sourceBuf-拷贝对象
// targetBuf-被拷贝对象

缓冲区裁剪

buf.slice(0,2)      // 返回一个新的缓冲区(它和旧缓冲区指向同一块内存)

Stream流

流类型

  • Readble => 可读流

  • Writable => 可写流

  • Duplex => 可读写流

  • Transform => 在读写过程中可以修改和变换数据的流(可读可写)

常用事件

  • data => 当有数据可读时触发

  • end => 没有更多的数据可读时触发

  • error => 在接收和写入过程中发生错误时触发

  • finish => 所有数据已被写入到底层系统时触发

读取流数据

var data = "";
var readerStream = fs.createReadStream('input.txt') // 创建可读流
readerStream.setEncoding('UTF8')                    // 设置编码
readerStream.on('data',function(chunk){             // 绑定data事件
    data += chunk;
})

数据写入流

var data = '菜鸟教程官网地址:www.runoob.com';
var writerStream = fs.createWriteStream('output.txt');  // 创建可写流
writerStream.write(data,'UTF8');                        // 使用utf8编码写入数据
writerStream.end("字符数据",编码,回调函数);                // 声明文件结尾
writerStream.on('finish', function() {                  // 绑定finish事件
    console.log("写入完成。");
});

module模块

require

  • "./"为当前目录

  • 一个Node文件就是一个模块(js文件,json或者编译过的c/c++模块)

exports

  • exports.A=... 把A作为模块的访问接口,require后通过"对象.接口"的形式使用

  • module.exports=A 把A作为整个模块进行对外,require后即可直接使用

  • module.exports的操作是唯一的,后面的会覆盖前面的

require的查找策略

  • 文件模块缓存 => 原生模块缓存存 => 原生模块存 => 文件模块

require接受的参数

  • http、fs、path等,原生模块

  • ../mod或../mod,相对路径的文件模块

  • ./pathtomodule/mod,绝对路径的文件模块

  • mod非原生模块的文件模块

commonjs规范

  • module.exports才是真正的接口,exports只不过是它的一个辅助工具

  • 所有的exports收集到的属性和方法,都赋值给了module.exports,最终返回给调用的是module.exports而不是exports

  • 如果module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略

  • 你的模块可以是任何合法的javascript对象--boolean, number, date, JSON, string, function, array...

node函数

  • 函数传递和匿名函数的使用

node路由

  • 作为处理请求模块存在

  • 通过http模块创建服务,url模块解析路径,路由模块被合并注入到http模块,以对返回并解析了的路径值进行区别的程序处理

node全局对象

__filename

  • 表示当前正在执行的脚本的文件名,返回脚本所在的绝对路径

  • 如果在模块中,则返回模块文件的路径

__dirname

  • 表示当前执行脚本所在的目录

process

  • 用于描述当前Node.js进程状态的对象,属于一个全局变量,即global对象的属性

  • 常用事件

    • exit(当进程准备退出时触发)

    • beforeExit(当node清空事件循环,并且没有其他安排时触发)

    • uncaughtException(当一个异常冒泡回到事件循环时触发)

    • signal(当进程接收到信号时就触发)

util模块

util.inherits

  • 实现对象间原型继承

  • 参数分别为(子函数,父函数)

util.inspect

  • 将任意对象转换为字符串的方法,通常用于调试和错误输出

  • 接受4个参数——(转换对象,是否输出隐藏信息,递归层次,控制台输出颜色)

util.isArray

util.isRegExp

util.isDate

util.isError

FileSystem模块

异步·打开文件

fs.open(filePath,打开方式,权限,callback) 

// callback包含2个参数,分别为err对象,文件描述符(fd)

异步·获取文件信息

fs.stat(filePath,callback)

// callback包含2个参数,分别为err对象和stats对象

// stats对象包含stats相关属性和方法,用于文件信息判断

异步·写入文件

fs.writeFile(file, data,options,callback)  // callback只包含err对象

异步·读取文件

fs.readFile(file, option, callback)

// callback包含2个参数,分别为err对象和data文件

// 如果options是一个字符串,则它指定了字符编码

异步·读取

fs.read(fd, buffer, offset, length, position, callback)

fd - fs.open()回调返回的文件描述符
buffer - 数据写入的缓冲区
offset - 缓冲区写入的写入偏移量
length - 要从文件中读取的字节数
position - 文件读取的起始位置,如果position的值为 null,则会从当前文件指针的位置读取
callback - 有三个参数err, bytesRead, buffer,err为错误信息,bytesRead表示读取的字节数,buffer为缓冲区对象

异步·关闭文件

fs.close(fd, callback)                // callback没有参数

异步·截取文件

fs.ftruncate(fd, len, callback)       // callback只包含err对象

异步·删除文件

fs.unlink(path, callback)             // callback没有参数

异步·创建目录

fs.mkdir(path, 文件权限, callback)    // callback没有参数

异步·读取目录

fs.readdir(path, 文件权限, callback)  // callback包含两个参数,分别为err对象和files列表

异步·删除目录

fs.rmdir(path, callback)             // callback没有参数

express框架

请求和响应

  app.get('/', function (req, res) {})          // 处理请求和响应
  req.query                                     // 获取查询字符串
  res.send()                                    // 响应数据
  res.sendFile()                                // 响应文件(需要绝对路径,除非设置了根路径)
  res.end()                                     // 结束响应
  var server = app.listen(8081,callback)       // 创建服务
  server.address()                              // 获取地址信息
  express.static(资源目录)                        // 托管静态资源
  var bodyParser = require('body-parser')
  bodyParser.urlencoded({ extended: false })    //创建application/x-www-form-urlencoded编码解析

路由

  • 决定了由谁(指定脚本)去响应客户端请求

RESTful API

  • 一种软件设计风格和原则

  • web Services满足这种rest风格(体现为http请求服务)

node多进程

  • node虽是以单线程的模式运行的,但可以在多核cpu的系统上创建多个子进程,从而提高性能

  • 每个子进程总是带有三个流对象

    • child.stdin——标准输入
    • child.stdout——标准输出
    • child.stderr——标准错误
  • node提供child_process模块来创建子进程,方法有:

    • exec——使用子进程执行命令,缓存子进程的输出,以回调函数参数的形式返回

      • 参数:

        • command:将要运行的命令,参数使用空格隔开
        • options:参数对象
        • callback:回调函数(error,stdout,stderr)
    • spawn——使用指定的命令行参数创建新进程
      • 参数:

        • command:将要运行的命令
        • args:字符串参数数组
        • options:参数对象
    • fork——spawn的特殊形式,用于在子进程中运行的模块。
      • 与spawn方法不同的是,fork会在父进程与子进程之间,建立一个通信管道,用于进程之间的通信
      • 参数:
        • modulePath:将要在子进程中运行的模块
        • args:字符串参数数组
        • options:参数对象

mySQL

连接数据库

    'SELECT 1 + 1 AS solution';

'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';

'DELETE FROM websites where id=6';

'UPDATE websites SET name = ?,url = ? WHERE Id = ?';

'SELECT * FROM websites';

mongoDB

链接数据库

MongoDB会自动创建数据库和集合,使用前不需要手动去创建

collection.insert(data,callback);

collection.remove(whereStr,callback);

collection.update(whereStr,updateStr,callback);

collection.find(whereStr).toArray(callback);

nodeJS菜鸟教程笔记的更多相关文章

  1. Nodejs 菜鸟教程学习-创建第一个应用

    注:为了解学习,都是参照http://www.runoob.com/nodejs/nodejs-tutorial.html书写,做下笔记. 对于Nodejs开发来说,在开发一个应用时,我们不仅仅是实现 ...

  2. Python3菜鸟教程笔记

    多行语句 同一行显示多条语句 Print 输出

  3. 菜鸟教程之学习Shell script笔记(下)

    菜鸟教程Shell script学习笔记(下) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  4. 菜鸟教程之学习Shell script笔记(中)

    菜鸟教程Shell script学习笔记(中) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  5. 菜鸟教程之学习Shell script笔记(上)

    菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...

  6. 学习笔记|JSP教程|菜鸟教程

    学习笔记|JSP教程|菜鸟教程 ------------------------------------------------------------------------------------ ...

  7. 学习笔记之HTML 教程 | 菜鸟教程

    HTML 教程 | 菜鸟教程 http://www.runoob.com/html/html-tutorial.html 菜鸟教程在线编辑器 http://www.runoob.com/try/try ...

  8. 学习笔记之C# 教程 | 菜鸟教程

    C# 教程 | 菜鸟教程 http://www.runoob.com/csharp/csharp-tutorial.html 菜鸟教程在线编辑器 http://www.runoob.com/try/r ...

  9. 【转载】Node.js 教程(菜鸟教程系列)

    很好的一篇教程:Node.js 教程 简单做下笔记 概述 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立 ...

随机推荐

  1. HSRP 详解

    简介 HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议.HSRP把多台路由器组成一个“热备份组”,形成一个虚拟路由器.这个组内只有一个路由器是 ...

  2. JSON Hijacking实战利用

    0×01漏洞的挖掘 一般挖掘的过程中,burpsuite代理的History做寻找,过滤多余不可能存在漏洞的一些链接,如下图所示: 我们在返回包中json格式发现了如下的敏感信息(用户Id,用户名,用 ...

  3. 【转载】IPSec-Tools配置

    来源:https://blog.csdn.net/zt698/article/details/4811604 1       介绍从Linux 2.6内核开始,内核就自身带有IPSec模块,配合IPS ...

  4. JMeter接口测试响应数据中乱码问题解决方法

    乱码产生原因: 结果处理编码与被测对象的编码不一致,JMeter是默认按照ISO-8859-1编码格式进行解析. 解决方法一: 根据接口文档或者找开发确认项目编码是哪种,因为有的项目用的是GBK,有的 ...

  5. pdf转图片(qq:2798641729)

    前面已经把html转成pdf,但是用户可以下载图片格式的文件,所以我们必须把pdf转成图片格式,代码如下 package com.jit.platform.basics.util.pdf; impor ...

  6. opencv —— calcHist、minMaxLoc 计算并绘制图像直方图、寻找图像全局最大最小值

    直方图概述 简单来说,直方图就是对数据进行统计的一种方法,这些数据可以是梯度.方向.色彩或任何其他特征.它的表现形式是一种二维统计表,横纵坐标分别是统计样本和该样本对应的某个属性的度量. 计算直方图: ...

  7. MySQL锁与事务隔离级别

    一.概述 1.锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.IO等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并发访 ...

  8. 一个最简单的Dockfile实践

    一:一个Dockerfile文件 FROM bash COPY . /usr/jinliang/ WORKDIR /usr/jinliang/ CMD [ "sh", " ...

  9. POJ - 1426-Find The Multiple-专为小白解惑-同余加搜索树

    题意:给出一个整数n,(1 <= n <= 200).求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成,m不超过100位. 解题思路:首先大家应该会想到暴力枚举每一个m,但 ...

  10. 在NBA我需要翻译 适配器模式

    17.1 在NBA我需要翻译! 17.2 适配器模式 Adapter,将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作, 有些国家 ...