第一篇
一、Node.js模块:模块使用npm运行管理。
- events:事件模块,提供事件触发和事件监听功能。
- util:核心功能模块,用于弥补核心JS功能的不足。
- fs:文件操作模块,提供文件操作API
- http:Web协议模块,提供Web协议交互功能
- express:Web框架,用于快速构建Web应用服务
- vm:沙箱模块,用于提供干净的上下文环境
二、创建Node.js应用
1、使用require指令来加载和引入模块
语法格式:const module=require('module- name'); eg.var http=require('http'); 使用require指令来载入http模块,并将http赋值给变量http。
其中module-name可以是文件路径(相对或绝对路径),或模块名称,若为模块名称,则Node.js会自动从Node-module目录中查找该模块。
require 指令会返回被加载的模块的导出对象,可以通过该对象来访问模块中定义的属性和方法,如果模块中有多个导出对象,则可以使用解构赋值的方式来获取它们。
2、创建服务器
使用http.createServer()创建服务器,并用listen方法绑定8888端口。函数通过request,response参数来接收和响应数据。
eg.var http=require('http');
http.createServer(function (request, response){
// 发送 HTTP 头部
// HTTP 状态值: 200
// 内容类型: 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/');
//之后Node执行以下指令
node server.js
Server running at http://127.0.0.1:8888/
三、npm包安装
1、本地安装(local)
格式:npm install <Module Name>
- 会将安装包放在node_modules目录中,若没有目录则会在当前nmp目录下生成目录
- require()用来引入本地安装的包。
2、全局安装(glocal)
格式:npm install <Module Name> -g
- 安装在/usr/local目录下或node目录中
- 直接在命令行中使用
3、若俩者都想具备,则需要都安装或执行命令npm link
4、卸载模块
格式:npm uninstall <module name>
5、更新模块
格式:npm update <module name>
6、搜索模块
npm search <module name>
7、创建模块(使用npm生成package.json文件,最后输入"yes")
格式:npm <module name>
8、发布模块
格式:npm publish
7、查看包是否存在
格式:npm ls
第二篇
一、Node.js REPL(交互解释器):表示一个电脑环境,可以在终端输入命令,并接收系统的响应。
1、Node自带了交互解释器,可以执行以下任务:
- 读取:读取用户输入,解析输入的JS数据结构并存储到内存中。
- 执行:执行输入的数据结构。
- 打印:输出结果。
- 循环:循环操作以上步骤俩次直到用户按下ctrl-c按钮退出。
2、输入以下命令启动Node终端
- 简单表达式运算:eg.node 1+3 (回车)
- 使用变量:使用var来变量声明,若未使用var来声明则数据会直接打印出来。可以使用console.log()来输出结果。eg.x=2; 结果:2 var y=3; 结果:undefined console.log(x+y); 结果:5 undefined
- 多行表达式:可以使用for循环、switch语句等。
- 下划线变量:使用下划线获取上一条表达式的运算结果。
3、REPL指令
- 退出Node REPL:ctrl-d,按俩次ctrl-c
- 退出当前终端:ctrl-c
- 列出当前命令:Tab
- 查看输入历史命令:向上/向下键
- 列出使用命令:.help
- 退出多行表达式:.break , .clean
- 保存当前的 Node REPL 会话到指定文件:.save filename
- 载入当前 Node REPL 会话的文件内容: .load filename
二、Node.js回调函数(异步编程的直接体现)
回调函数在任务完成后被调用。列如一边读取文件,一边完成其他的任务,当文件读取完成后,文件内容会作为 回调函数的参数返回。回调函数一般作为最后一个参数出现。
eg. function fool1(参数1,参数2,参数3){ }
function fool2(参数1,参数2,参数3){ }
1、阻塞(按顺序执行)
eg.
//创建一个文件 input.txt ,内容如下:
菜鸟教程官网地址:www.runoob.com
//创建 main.js 文件, 代码如下:
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序执行结束!");
//以上代码执行结果如下:
node main.js
菜鸟教程官网地址:www.runoob.com
程序执行结束!
2、非阻塞(不看顺序执行,可以边读取文件边执行程序)
eg.
//创建一个文件 input.txt ,内容如下:
菜鸟教程官网地址:www.runoob.com
//创建 main.js 文件, 代码如下:
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());})
console.log("程序执行结束!");
//以上代码执行结果如下:
node main.js
程序执行结束!
菜鸟教程官网地址:www.runoob.com
注:程序fs.readFile()用于异步读取文件,若读取过程中出现错误,则执行err()对象,输出错误警告,例如上例中删除input.txt文件就会发出“Error: ENOENT, open 'input.txt‘ “警告语句;若未出现错误,则会跳过err对象。
三、Node.js Stream(流)
1、流的类型
- Readable:可读操作
- Writable:可写操作
- Duplex:可读可写
- Transfrom:操作被写入数据,然后读出结果。
2、所有Stream对象的EventEmitter(events提供的对象)的实例的常用事件:
- data:当前数据可读时触发
- end:没有更多数据可读时触发
- error:在接收或写入过程中有错误时触发
- finish:所有数据已经被写入到底层系统时触发
3、常见流操作
- 从流中读取数据
- 写入流
- 管道流(管道pipe)
- 链式流 (eg.压缩和解压文件)
四、Node.js模块系统(一个Node.js文件相当于一个模块)
1、引入模块
把一个对象封装到模块中,格式:module.exports=function(){……};
eg.//封装对象
function Hello(){
var name;
this.setName=function(thyName){
name=thyName;
};
this.sayHellow=function(){
console.log('Hello' +name);
};
};
module.exports=Hello;
//引入模块
var hello=require(' ./hello'); //引入目录下的hell.js文件,其中“ ./"为当前目录,node.js默认后缀为js
hello=new Hello();
hello.setName('BYVoid');
hello.sayHello();
2、服务端的模块存放处
require内部加载优先级:
- 从文件模块缓存加载:加载已经存在的模块
- 从原生模块加载:require方法在解析文件名之后
- 从文件加载:Node.js解析require方法传入的参数,并从文件系统中加载实际的文件
require方法接受以下参数的加载方式:
- 原生模块:http、fs、path等
- 相对路径的文件模块:./mod或../mod
- 绝对路径的文件模块:/pathtomodule/mod
- 非原生模块的文件模块:mod
第三篇
一、Node.js函数
1、函数定义:一个函数可以作为另一个函数的参数。其中可以先定义一个函数,然后再传递,或可以在传递参数的地方直接定义一个函数。
eg.
function say(word) {
console.log(word);
}
function execute(someFunction, value) { //say函数作为execute函数的第一个参数传递,其中传递的不是say函数的返回值,而是say函数本身;因say函数只有一个变量,所以传的值为word
someFunction(value);
}
execute(say, "Hello");
//结果:Hello
2、匿名函数:在另一个函数的括号中定义和传递这个函数
eg.
function execute(someFunction,value){
someFunction(value);
}
execute(function(word){console.log(word)},"Hello");
3、函数传递让HTTP服务器工作过程
eg.
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888);
console.log('Server running at http://127.0.0.1:8888/');
二、Node.js全局对象(global)
全局变量特点:
- 在最外层定义的变量
- 全局对象的属性
- 隐式定义的变量
1、——filename:当前正在执行的脚本文件名,输出文件所在位置的绝对路径
格式:console.log(_filename);
2、——dirname:当前执行脚本所在目录
格式:console.log(_dirname);
3、setTimeout(cb,ms):全局函数在指定毫秒(ms)数后执行指定函数(cb),且只执行一次
eg.function A(){
console.log("Hello World!");
}
setTimeout(A,2000);
4、clearTimeout(t):用于停止一个之前通过setTimeout()创建的定时器,参数t是之前创造的定时器。
eg.function A(){
console.log("Hello World!");
}
var t=setTimeout(A,2000);
clearTimeout(t);
5、setInterval(cb,ms):在指定的毫秒(ms)数后执行指定函数(cb),函数会不停的调用函数,直到clearInterval()被调用或窗口被关闭。
eg.
eg.function A(){
console.log("Hello World!");
}
clearInterval(A,2000);
三、Node.js文件系统
1、异步和同步:异步函数最后一个参数为回调函数,回调函数的第一个参数包含错误信息(error).异步性能更高,速度更快,且没有堵塞。
2、打开文件:格式:fs.open(path,flags[,mode],callback) 其中path表示文件路径;flags表示文件打开行为,比如r,r+等;mode表示设置文件模式(权限),默认为0666(可读,可写);callback表示回调函数,用俩个参数err和fd.
3、获取文件信息:格式:fs.stat(path,callback); 注:执行以后,会将stats类的实例返回给回调函数。
4、写入文件:格式:fs.writeFile(file,data[,options],callback),其中file表示文件名或文件描述符;data表示要写入文件数据,可以是String或Buffer(缓冲)对象;options表示该参数是一个对象,包含{encoding,mod,flag},默认编码为utf8,模式为0666,flag为‘w'。
5、读取文件:格式:fs.read(fd,buffer,offset,length,position,callback),其中fd表示通过fs.open()返回的文件描述符;buffer表示数据写入缓冲区;offset表示缓冲区写入的偏移量;length表示要从文件中读取的字节数;position表示文件读取的起始位置,若值为null,则从当前文件指针的位置读取;callback有三个参数err,bytesRead(读取字节数),buffer(缓冲区对象)
6、关闭文件:格式:fs.close(fd,callback),callback没有参数,只有err
7、截取文件:格式:fs.ftruncate(fd,len,callback),其中len表示文件截取长度;callback没有参数
8、删除文件:格式:fs.unlink(path,callback),callback没有参数
9、创建目录:1格式:fs.mkdir(path[,options],callback),其中options 参数可以是:recursive - 是否以递归的方式创建目录,默认为 false。mode - 设置目录权限,默认为 0777。callback没有参数
10、读取目录:格式;fs.readdir(path,callback),callback有俩个参数files,err,files为目录下的文件数组列表
11、删除目录:格式:fs.rmdir(path,callback),callback没有参数.
四、Node.js常用工具:util模块(提供常用函数集合,弥补JS功能不足问题)
格式:const util=require ('util');
1、util.callbackify(original):将async异步函数或带有一个返回值的Promise函数转换成遵循异步优先的回调函数,列如将(err,value)=>回调为最后一个参数。在回调函数中,第一个参数为拒绝原因(若Promise解决,则为null),第二个参数为解决的值。
eg.const util = require('util');
async function fn() {
return 'hello world';}
const callbackFunction = util.callbackify(fn);
callbackFunction((err, ret) => {
if (err) throw err;
console.log(ret);
});
2、util.inherits(constructor,superConstructor):实现对象间原型继承的函数
3、util.inspect(object,[showHidden],[depth],[colors]):将任意对象转换为字符串,通常用于调试和错误输出,至少接受一个参数object,及要转换的对象;showHidden是可选参数,若值为true,将输出更多隐藏信息;depth表示最大递归层数,可以指定层数控制输出量,默认为2层,若指定为null表示不限递归层数;colors值为true,输出格式以ANSI颜色编码。
4、util.isArray(object):若给定参数object是数组,则返回true,否则返回false.
5、util.isRegExp(object):若给定的object参数是正值,返回true,否则返回false.
6、util.isDate(object):若参数是日期返回true,否则返回false.
补充:var和const的区别
var声明变量属于函数作用域,且存在变量提升现象,变量可以重复声明。
const声明变量属于块级作用域,且不存在变量提升现象,在同一块级,变量不可以重复修改。
五、Node.js GET/POST请求
1、获取GET请求内容:URL是完整的请求路径,而url模块中parse函数提供这个功能。
eg.var http = require('http');
var url = require('url');
var util = require('util');
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);
2、获取URL参数:使用url.parse方法来解析URL参数
eg.var http = require('http');
var url = require('url');
var util = require('util');
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
3、获取POST请求内容(在请求体中):http.ServerRequest没有一个属性是请求体,因为等待请求体是一件耗时的工作。
第四篇
一、Node.js MYSQL
1、连接数据库
eg.
var mysql=require('sql');
var connection=mysql.createConnection({
host : 'localhost', //host表示主机地址,默认为localhost
user : 'root', //user表示用户名
password :'123456', //password表示密码
database :'test' //database表示数据库名
});
connection.connect();
connection.query('SELECT 1+1 AS soluction',function(error,results,fields){
if (error) throw error;
console.log('The soluction is: ',results[0].soluction);
});
| charset |
连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写) |
| localAddress |
此IP用于TCP连接(可选) |
| socketPath |
连接到unix域路径,当使用 host 和 port 时会被忽略 |
| timezone |
时区(默认:'local') |
| connectTimeout |
连接超时(默认:不限制;单位:毫秒) |
| stringifyObjects |
是否序列化对象 |
| typeCast |
是否将列值转化为本地JavaScript类型值 (默认:true) |
| queryFormat |
自定义query语句格式化方法 |
| supportBigNumbers |
数据库支持bigint或decimal类型列时,需要设此option为true (默认:false) |
| bigNumberStrings |
supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false) |
| dateStrings |
强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false) |
| debug |
开启调试(默认:false) |
| multipleStatements |
是否许一个query中有多个MySQL语句 (默认:false) |
| flags |
用于修改连接标志 |
| ssl |
使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件 |
2、数据库操作