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 运行时建立 ...
随机推荐
- 网站windows可以访问mac和linux无法访问【MTU MSS问题】
环境: 阿里云LB 内网地址类型,代理后面的k8s上的服务 公司和阿里云之间vpn打通 在windows上进行访问一切正常,在相同的办公局域网linux主机内访问不通,mac笔记本访问同样不通,tel ...
- H5浏览器强制手机横屏
H5强制手机横屏 1. 通过screen.orientation可以定义手机屏幕的方向,但是lock()方法仅在浏览器已经通过requestFullscreen()切换到全屏模式时起作用,例:强制手机 ...
- v-charts x轴字体斜显示
如下图,因为X轴内容太多,放不下,插件默认间隔显示需求:X轴内容要全部显示出来(只有斜显示或固定宽多余的用省略代替,本来需要就是想显示全部内容,所以只能取斜显示的方案) 先看看v-charts的文档: ...
- go程序基于阿里云CodePipeline的一次devops实践
背景 最近朋友有个项目代码托管用的码云,测试服务器(阿里云ECS)只有一台,三四个人开发,于是想基于阿里云的CodePipeline快速打造一套自动化cicd的流程,使用docker来进行多套环境部署 ...
- 有哪些「看似复杂,实则简单」的 PS 技巧?
Mac版ps2019哪里有?本次主要以组合键为主,PS中隐藏功能都是通过这些“组合技”启动的,据统计熟练地使用一系列组合技会让你的效率提升30%(纯属虚构).其中一些比较难理解的我都制作了GIF动态图 ...
- 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理
一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...
- C#连接数据库的方法
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- Windows10设置系统参数
屏幕分辨率设置 电源屏幕显示时间 投影可以进行手机投影到电脑进行操作,远程桌面可以进行远程访问,如云服务器 设置桌面图标和背景 设置默认应用 安装软件,必备的几项软件 --其中个人认为(1)(2)是 ...
- lucas定理 模板
lucas定理 (nm) mod p=(⌊np⌋⌊mp⌋)(n mod&VeryTh ...
- Vue(八)---组件(Component)
组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码. 注册一个全局组件语法格式如下: Vue.component(tagName, optio ...