什么是nodejs
-
node.js是一个基于Chorme V8引擎的javaScript运行环境
-
如何再node中执行js代码
1)打开终端
2)node + js文件名称 回车
node内置api——fs
1)读取文件 fs.readFile()
在js代码中使用fs,需要将其导入:const fs = require(‘fs’)
const fs = require('fs');
// fs.readFile(path, [options], callback); path必选参数,options编码格式
// callback回调函数
fs.readFile('hello word.md' ,'utf8', function (err, data) {
// 判断文件是否读取成果
if (err) {
return console.log('读取失败');
}
console.log(data);
})
- 写如内容 fs.writeFile()
// fs.writeFile(file, data[option], callback)
// file: 路径
// data:数据【option】编码格式
// callback:回调
fs.writeFile('hello word.md', '你好集美', 'utf8', (err) => {
console.log(err); //文件写如成果,err的值为null
if (err) {
console.log('失败了');
}
console.log('成功了');
})
node内置api ——path
注意:先导入path模块
const path = require('path')
1) path.join() 实现路径片段的拼接
const path = require('path');
// 1 path.join([...paths]) 返回值为拼接好的字符串
const pathstr = path.join('/a', '/b/c', '../', './d');
console.log(pathstr);//\a\b\d 注意../具有消除前面的路径的作用
2)path.basename() 从路径字符串中,将文件域名拿出来
//path.basename(path[,ext])
//path:路径
//ext:扩展名
//
const ym = path.basename('http://baidu.com');
console.log(ym); //baidu.com
const ym2 = path.basename('http://baidu.com','.com');
console.log(ym2); //baidu 去除掉扩展名
内置api——http
1)概念:http模块是node官方提供,专门用来创建web服务器的模块。通过http提供的http.createServer()方法,就能将一台普通的电脑,变成一台web服务器,从而对外提供web资源。
2)先导入:const http = require(‘http’)
3)功能:服务器与普通电脑的区别在于,服务器上安装了web服务器软件,如IIS、Apache
在nodejs中不需要安装第三方的web服务器软件,基于http模块,就可以写一个服务器软件,对外提供web服务。
4)IP地址:每台计算机的唯一地址,通过ip地址实现电脑间的通信,每台服务器也有自己的ip地址。在开发其简,自己的电脑即使服务器也是客户端,为了方便测试,在浏览器中输入127.0.0.1,就可以把自己的电脑当作服务器访问。
5)域名和域名服务器
DNS将域名转换成IP进行访问
6) 端口号
7) 创建基本的web服务器
A)导入http模块
B)创建web服务实例
C)为服务器绑定request事件,监听客户端请求
D)启动服务器
//1.导入http模块
const http = require('http');
//2.创建web服务实例
const server = http.createServer()
// 3.服务器绑定request事件,监听客户端请求
// 使用.on()方法,绑定request事件
server.on('request', (req, res) => {
console.log('someone visit our server');
})
// 4启动服务器
// server.listen(端口号,cb回调,)
server.listen(80, () => {
console.log('http server running at http://127.0.0.1');
})
分析:
req:请求对象,只要服务器接收到客户端的请求,就会调用server.on()为服务器绑定request处理函数。如果访问到与客户端相关的数据和属性,就可以用req.url:获得url地址,req.method:获取请求类型
res:响应对象,可以获得访问的服务器的相关数据和属性,并且res.end()向客户端发送内容,结束此次请求
8)根据不同的url,响应不同的html内容
模块化
- 概念
解决一个复杂问题是,自上向下逐层将系统划分为若干个模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。 - 编程里面的模块化
遵循固定的规则,八大文件拆分成独立并相互依赖的多个小模块。 - 代码拆分的好处
1)提高代码的复用性
2)提高代码的可维护性
3)可实现按需加载 - 模块化规范
模块化所要遵循的规范,如使用什么样的语法格式引用 - nodejs的模块分类
内置模块,nodejs官方提供的,如js path、http
自定义模块 用户创建的每个js都是自定义模块
第三方模块,由第三方提供的,非广发提供的内置模块,需要先下载后使用
5.1 模块加载
内置模块——使用require(模块名)
自定义模块——require(js文件路径)
第三方模块——require(模块名)
5.2 模块作用域
与函数作用域相同,在自定义模块中定义的遍历、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域
好处:防止全局变量污染
5.2.1 向外共享作用域的成员
1) module对象:每个自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息。
5.2.2 module.exports 默认等于空对象{}
通过module.exports 就可向外共享数据。
外界通过require()方法导入自定义模块时,得到的就是module.exports所指的对象。
5.2.3 export对象
为了简化对外共享成员的代码,Node提供了exports对象,默认情况下,exports和module.exports指向同一个对象,共享结果。
5.2.4 两个命令export/import的使用
(1) export用于规定模块的对外接口
(2)import命令用于输入其他模块的内容
js文件中的暴露
分别暴露 ——上图
统一暴露 ——下图
默认暴露——下下图
- 引入方式
1) 通用导入方式
三种暴露方式均可使用
import * as m1(自己起的名称) from './js/m1.js';
2)解构赋值的方式
三种暴露方式均可使用
//m1文件为分别暴露
import {school,teach} form './js/m1.js'
//m2文件为统一暴露
import {school as sc,findJob} form './js/m2.js' //使用别名避免重名
//m3文件为默认暴露
import {default as d} form './js/m3.js' //默认暴露必须起别名
3)简单引入
只适用于默认暴露
import m3 form './js/m3.js'
express
- 概念:基于nodejs的快速、开放、极简的web开发框架
- 作用:和内置http模块类似,专门用来创建web服务器的
- 本质: npm上的第三方报,提供快速创建web服务器的方法
- express功能:对于前端,最常见的两种服务器web服务器:专门对外提供web网页资源的服务器;API接口服务器:专门对外提供API接口的服务器;对于express,这两种服务器均可创建
5 express的使用
5.1 安装——npm -i express @4.17.1
5.2 创建web服务器
笔记跟随
https://www.bilibili.com/video/BV1a34y167AZ?p=39