Node.JS学习小结

1.什么是Node.js?

Node.js是一个基于"Chrome V8引擎"的JavaScript运行环境

2.ChromeV8引擎是什么呢?

V8引擎是一款专门解释和执行JS代码的虚拟机,任何程序只要集成了V8引擎都可以执行JS代码NodeJS不是一门编程语言,只是一个运行环境,就像windows,Linux,iOS等一样。由于集成了V8引擎,可以这个运行环境可以执行我们编写的JS代码。这个运行环境的最大特点是可以操作系统的底层API,通过这些API我们可以编写出网页中无法实现的功能

3.Global全局变量

__dirname:绝对路径的文件夹打印结果:/Users/cc/Desktop/web/Web2/10-Node

__filename:绝对路径的文件打印结果:/Users/cc/Desktop/web/Web2/10-Node

/05-js.js延迟执行setTimeout(callback, delay[, ...args])定时器setInterval(callback, delay[, ...args])

4. NodeJS开发中的模块NodeJS采用CommonJS规范实现了模块系统在Node.js模块系统中,每个文件都被视为一个独立的模块CommonJS规范CommonJS规范规定了如何定义一个模块,如何暴露(导出)模块中的变量函数,以及如何使用定义好的模块在CommonJS规范中一个文件就是一个模块在CommonJS规范中每个文件中的变量函数都是私有的,对其他文件不可见的在CommonJS规范中每个文件中的变量函数必须通过exports暴露(导出)之后其它文件才可以使用在CommonJS规范中想要使用其它文件暴露的变量函数必须通过require()导入模块才可以使用

定义一个07-a.js模块内容如下

let a =10;functionsum(c,b){returnc + b;}

// exports是一个对象

//暴露出去一个属性变量exports.a = a;exports.fn = sum;

b.js文件中导入模块

//导入a.js模块let  obj = require("./07-a.js");

//打印 console.log(obj);let  res = obj.fn(10,10); console.log(res);


*****暴露模块内部变量的方式有多种 1.通过exports.xxx = xxx导出


2.通过module.exports.xxx=xxx导出那么上述的a.js文件可以这样写

let  name ="CC";functionsum(c,b){return c +b;}

//暴露给外面变量/函数module.exports.name=name;module.exports.fn=sum;

3.通过全局变量global暴露(不建议使用这个)

let   name ="CC";functionsum(c,b){return c +b;}   //暴露变量给外界global.str= name;  global.fn = sum;


注意: exports 和 module.exports的区别

在导入变量的时候,exports不能是直接将变量赋值,这样在打印的时候的{},只能给exports对象添加一个属性变量赋值暴露

导入模块require需要注意一下几点

1.require导入模块时可以不添加导入模块的类型后缀文件名

如果没有指定导入模块的类型, 那么会依次查找.js .json .node文件 无论是三种类型中的哪一种, 导入之后都会转换成JS对象返回给我们 require可以导入"自定义模块(文件模块)"、"系统模块(核心模块)"、"第三方模块"

***包和包管理工具所谓的包:就是来维护多个模块之间的关系的模块前面说过就是一个单一功能的函数包管理工具NPM(NodePackageManager)NPM不需要单独安装,只要配置好Node.js环境,就会自动安装

基本操作

npm install(i) -g 包名 安装包 

npm uninstall -g 包名 卸载包

 npm update -g 包名 更新包 (更新失败可以直接使用install)

 npm init -> 初始化package.json文件

 npm init -y -> 初始化package.json文件

npm install(i) 包名 --save 

npm install(i) 包名 --save-dev

Path路径模块

封装了各种路径相关的操作需要手动投入这个模块//导入系统Path模块letpath=require("path");

1.获取路径path.dirname(path)    let res2 =path.dirname("user/location/index.html");    

//打印结果: user/location    console.log(res2);

2.拼接路径path.join([...paths])    let str =path.join("/a/b","c");     

//打印结果: /a/b/c3.path.resolve([...paths]):

3.用于解析路径// let res =path.resolve('/foo/bar','./baz'); // /foo/bar/baz    // let res =path.resolve('/foo/bar','../baz'); // /foo/baz    let res =path.resolve('/foo/bar','/baz'); // /baz    console.log(res);

fs文件模块

需要手动导入才可以使用

//1.导入文件模块letfs =require("fs");

2.文件的读取fs.readFile(path[, options], callback)

异步方法fs.readFileSync(path[, options])

//1导入文件模块letfs =require("fs");

//导入路径模块letpath =require("path");

// __dirname绝对路径文件夹

// join拼接路径letfilePath  = path.join(__dirname,"data.txt");

//2.读取文件fs.readFile(filePath,"utf8",function(err,data){//注意,如果第二个参数utf8不传递的话,返回的就是二进制数据//传递的话就返回的事-字符串if(!err){//读取成功后,获取的是二进制数据console.log("读取成功",data);    }else{console.log("读取失败",err);    }});

3.写入文件数据fs.writeFile(file, data[, options], callback)

异步方法fs.writeFileSync(file, data[, options])//导入文件模块letfs =require("fs");

//导入路径模块letpath =require("path");/

/拼接路径letfilePath =  path.join(__dirname,"cc.txt");

//异步写入数据//参数一:写入的文件路径//参数二:写入的内容//参数三:编码方式//参数四:失败的回调fs.writeFile(filePath,"我是CC","utf8",function(err){console.log(err);if(err){thrownewError("写入失败");  }else{console.log("写入成功");  }    });

//同步写入数据letfileSyncPath =  path.join(__dirname,"Sync.txt");letres = fs.writeFileSync(fileSyncPath,"同步写入数据","utf8");console.log(res);

关于简单认识node.js模块化开发

模块化开发 传统非模块化开发有如下的缺点: 1、命名冲突 2、文件依赖

前端标准的模块化规范: 1、AMD - requirejs 2、CMD - seajs

服务器端的模块化规范: 1、CommonJS - Node.js

模块化相关的规则: 1、如何定义模块:一个js文件就是一个模块,模块内部的成员都是相互独立 2、模块成员的导出和引入

模块文件的后缀3种情况:.js .json .node 上述三种模块的加载优先级(不加文件后缀时的优先级):.js -> .json -> .node

导出 module.exports = { sum : sum, subtract : subtract }

引入 var mod= require('./01.js');

express模块

服务器相关

服务器:1,服务器是一台电脑 2,服务器软件(apach tomcat iis ngnix node) 3.服务器ip 和 端口号(80)

局域网:服务器通过网线(无线连接) 每个电脑都会有一个ip

外网:

ip:确定服务器主机的位置

port(端口):确定服务器里的某个程序

api接口的书写

接受数据

-- get req.query

-- post req.body 需要body-parser 插件进行解析

注意数据格式 json x-www-form-urencode formdata

中间件 multer

内置中间件 static

自定义中间件 (全局和局部)

第三方中间件 (body - parser)

在合适的地方执行next

静态资源目录 static (类似apache的www)

非关系数据库(文档) mongodb

1.下载

2.安装

处理异步的常用方式

promise asyc/awiat (es7)

promise //解决异步回调处理

封装的promise函数有两个参数(reslove,reject)并且会执行两个外部函数then和catch

执行reslove表示成功,外部会走then()函数;;执行reject表示失败,外部会走catch()函数

封装好promise后可以进行链式调用,只需要一个catch()

学习成果 ------- 前后端交互后台项目的搭建和渲染!( http://localhost:3000/admin )

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355