nodeJS菜鸟教程笔记
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:参数对象
- exec——使用子进程执行命令,缓存子进程的输出,以回调函数参数的形式返回
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菜鸟教程笔记的更多相关文章
- Nodejs 菜鸟教程学习-创建第一个应用
注:为了解学习,都是参照http://www.runoob.com/nodejs/nodejs-tutorial.html书写,做下笔记. 对于Nodejs开发来说,在开发一个应用时,我们不仅仅是实现 ...
- Python3菜鸟教程笔记
多行语句 同一行显示多条语句 Print 输出
- 菜鸟教程之学习Shell script笔记(下)
菜鸟教程Shell script学习笔记(下) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...
- 菜鸟教程之学习Shell script笔记(中)
菜鸟教程Shell script学习笔记(中) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...
- 菜鸟教程之学习Shell script笔记(上)
菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...
- 学习笔记|JSP教程|菜鸟教程
学习笔记|JSP教程|菜鸟教程 ------------------------------------------------------------------------------------ ...
- 学习笔记之HTML 教程 | 菜鸟教程
HTML 教程 | 菜鸟教程 http://www.runoob.com/html/html-tutorial.html 菜鸟教程在线编辑器 http://www.runoob.com/try/try ...
- 学习笔记之C# 教程 | 菜鸟教程
C# 教程 | 菜鸟教程 http://www.runoob.com/csharp/csharp-tutorial.html 菜鸟教程在线编辑器 http://www.runoob.com/try/r ...
- 【转载】Node.js 教程(菜鸟教程系列)
很好的一篇教程:Node.js 教程 简单做下笔记 概述 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立 ...
随机推荐
- apache工具
组件 功能介绍HttpClient 提供HTTP客户端与服务器的各种通讯操作. 现在已改成HttpComponentsIO io工具的封装.Lang3 Java基本对象方法的工具类包 如:String ...
- Mysql 删除从数据库的relay logs最佳方式、最安全方式
情景 MySQL数据库主从复制在默认情况下从库的relay logs会在SQL线程执行完毕后被自动删除.但是:在relay_log_purge = 0和MHA集群下,不会被自动删除,需要手动删除.如何 ...
- 【学习笔记】:JavaScript基础知识超详细总结!
目录 一.JavaScript的实现 二.JavaScript语言的特点 三.JS与HTML如何结合 四.JS中的数据类型 四.JS的原始数据类型 2.JS的引用数据类型 五.JS引用数据类型之函数 ...
- Windows远程连接Ubuntu上的MySQL数据库
原因:mysql安装好后,默认监听3306端口,并且只允许localhost访问,只允许root用户在localhost上登录. 我的环境: Ubuntu16.04 ...
- 到2029年MRAM收入将增长170倍
一份新市场报告预计,从2018年到2029年,独立MRAM和STT-MRAM的收入将增长170倍,达到近40亿美元的收入.下一代内存技术的增长将主要由取代效率较低的内存技术(例如NOR闪存和SRAM) ...
- 【python基础语法】国庆扩展练习题
''' 一.国庆知识小拓展 1. 用户登陆程序需求: 1. 输入用户名和密码; 2. 判断用户名和密码是否正确? (name='root', password='123') 3. 为了防止暴力破解, ...
- Galactic Collegiate Programming Contest Gym - 101572G 模拟
#include<bits/stdc++.h> using namespace std; int n,m; struct node { int id; int slove; int pen ...
- vs2015 编译boost库
1.下载boost官网安装包. https://dl.bintray.com/boostorg/release/1.66.0/binaries/ 注意:这里一定要选择好boost版本 如: boos ...
- 39.Python模板结构优化-引入模板include标签、模板继承使用详解
在进行模板的构造时,不免有些模板的部分样式会相同,如果每一个模板都是重写代码的话,不仅在做的时候麻烦,而且在后期的维护上,也是相当的麻烦.所以我们可以将模板结构进行优化,优化可以通过:引入模板:模板继 ...
- SpringBoot 教程之 banner 定制
目录 简介 变量 配置 编程 示例 参考资料 简介 Spring Boot 启动时默认会显示以下 LOGO: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ ...