Node.js笔记

第一篇
 一、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'});
// 解析 url 参数
var params = url.parse(req.url, true).query;
res.write("网站名:" + params.name);
res.write("\n");
res.write("网站 URL:" + params.url);
res.end(); }).listen(3000);
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、数据库操作
  • 查询数据
  • 插入数据
  • 更新数据
  • 删除数据
 
 
 
 
 
 
 
 
 
posted @ 2024-01-27 17:48  小梨漫  阅读(41)  评论(0)    收藏  举报