0329明日日考__dirname__filename内置模块 path1.path.basename()2.path.dirname(path)3.path.extname(path)4.path.parse()5.path.format()6.path.join7.path.isAbsolute8.path.resolve()FS模块(FS系统)引入FS模块系统fs.readFile()fs.writeFile()npm是什么package是什么package.json是什么node_modulesmodule第三方模块的使用方法版本号项目介绍http内置模块http.createServer()res.writeHead()res.end()server.listen()Node监听Conten-Type写服务器的步骤0327知识点命令行使用技巧cd命令pwdlsmkdirrmclear清屏new-itemNode.jsNode是什么Node执行js的方式NodeJS VS 浏览器module API是什么 module对象NodeJS中的module系统分为几种?模块系统的背景NodeJS中的module分为几种?NPM是什么CommonJS模块系统module对象module.prototype.require()module.exportsApp1.js
0329
明日日考
-
__dirname是什么
表示当前文件(模块)所在的目录名称
-
__filename是什么
表示当前文件(模块)的名称
-
path模块的用途是什么?
提供了处理路径的API
-
如何把一个字符串路径转成对象?
path.parse()
-
如何提取当前Js文件的文件名?
path.basename('路径','删除的后缀名')
console.log(path.basename(__filename,'.js'));
-
path.join('/fold1',//folder2',../index.html') 的结果是什么?
\fold1\index.html
-
path.resolve('/fold1',/folder2',../hello.html') 的结果是什么?
当前根目录:\hello.html
-
写出读取同级文件data.txt内容的代码 Data.txt
Helloindex.js
const fs = require("node:fs") const content = fs.readFile('./data.text','utf-8',(err,data)=>{ if(err){ console.log(err); }else{ console.log(data) } }) //Hello -
NPM是什么?
Node软件包管理工具
- 他拥有至少一个模块
- 拥有package
-
package.json 文件的用途是什么?
用于描述和配置模块文件
-
如果说使用第三方模块一共有四步,你认为有哪四步?
第一步:创建文件夹
第二步:创建index.js
第三步:安装upper-case模块
第四步:修改index.js内容,运行index.js
__dirname
定义
__dirname表示当前文件(模块)所在的目录名称
- Dir: directory 文件夹、目录
- Name: 名字
语法
console.log(__dirname);//全局变量
示例
console.log(__dirname);
输出
D:\wxy3\js\作业\2023\2023.3.29
绝对路径 vs 相对路径
#绝对路径
\wxy3\js\作业\2023\2023.3.29
\js\作业\2023\2023.3.29
作业\2023\2023.3.29
#相对路径
./wxy3/js/作业
wxy3/js/作业
__filename
定义
__filename表示当前文件(模块)的名称
- file: 文件
- Name: 名字
示例
console.log(__filename)
输出
D:\wxy3\js\作业、课堂\2023\3月\2023.3.29\global.js
内置模块 path
定义
node:path 是一个内置模块。它提供了处理路径的API。路径分为:
- 文件路径
- 文件夹路径
使用path模块,第一步做什么?
语法
require("node:path")
示例
const path = require("node:path")
console.log(__filename);
console.log(path.basename(__filename));
console.log(path.basename(__filename,'.js'));
console.log(path.basename(__dirname));
输出
D:\wxy3\js\作业、课堂\2023\3月\2023.3.29\path.js
path.js
path
2023.3.29
1.path.basename()
定义
语法
path.basename('路径','删除的后缀名')
返回值
返回 path 的最后一部分
示例
console.log(__filename);
console.log(path.basename(__filename));
console.log(path.basename(__filename,'.js'));
console.log(path.basename(__dirname));
输出
D:\wxy3\js\作业、课堂\2023\3月\2023.3.29\path.js
path.js
path
2023.3.29
2.path.dirname(path)
定义
dirname()用于返回当前目录的路径
语法
path.basename('路径','删除的后缀名')
返回值
无
示例
console.log(__dirname);
console.log(path.dirname(__dirname));
输出
D:\wxy3\js\作业、课堂\2023\3月\2023.3.29
D:\wxy3\js\作业、课堂\2023\3月
3.path.extname(path)
定义
返回的是当前文件的扩展名
语法
返回值
无
示例
输出
4.path.parse()
定义
parse() 方法:从路径字符串返回一个对象
语法
path.parse('路径')
返回值
返回一个表示路径的对象
示例
console.log(__filename);
console.log(path.parse(__filename));
输出
{
root: 'D:\',
dir: 'D:\wxy3\js\作业、课堂\2023\3月\2023.3.29',
base: 'path.js',
ext: '.js',
name: 'path'
}
5.path.format()
定义
format()方法:从路径对象转路径字符串
语法
path.format(路径)
返回值
返回路径字符串
示例
const obj = path.parse(__filename);
console.log(path.format(obj));
输出//D:\wxy3\js\作业、课堂\2023\3月\2023.3.29\path.js
6.path.join
定义
join()方法用于把路径片段连接为规范路径
简言之:连接路径片段
语法
path.join()
path.join('路径片段1','路径片段2'...)
返回值
返回一个拼接好的规范的路径
示例
const p = path.join('f1','f2','i.html')
console.log(p);
const p2 = path.join('/f1','f2','i.html')
console.log(p2);
const p3 = path.join('/f1','//f2','i.html')
console.log(p3);
const p4 = path.join('/f1','//f2','./i.html')
console.log(p4);
const p5 = path.join('/f1','//f2','../i.html')
console.log(p5);
示例
f1\f2\i.html
\f1\f2\i.html
\f1\f2\i.html
\f1\f2\i.html
\f1\i.html
7.path.isAbsolute
定义
isAbsolute()方法用于检测一个路径是否是绝对路径。
语法
path.isAbsolute(path)
返回值
返回布尔值true、false
示例
console.log(path.isAbsolute(__filename));//true
console.log(path.isAbsolute('./data.json'));//false
8.path.resolve()
定义
resolve()方法用于解析为绝对路径
语法
path.resolve([...paths])//路径片段
返回值
返回绝对路径字符串
示例
const p = path.resolve('f1','f2','i.html')
console.log(p);
const p2 = path.resolve('/f1','f2','i.html')
console.log(p2);
const p3 = path.resolve('/f1','//f2','i.html')
console.log(p3);
const p4 = path.resolve('/f1','//f2','./i.html')
console.log(p4);
const p5 = path.resolve('/f1','//f2','../i.html')
console.log(p5);
输出
D:\wxy3\js\作业、课堂\2023\3月\2023.3.29\f1\f2\i.html
D:\f1\f2\i.html
D:\f2\i.html
D:\f2\i.html
D:\i.html
FS模块(FS系统)
定义
FS 文件系统模块允许操作计算机系统上的的文件。具体操作如下:
- 读取
- 创建
- 修改
- 删除
引入FS模块系统
要使用fs文件系统,请先引入fs模块
语法:基于promise API(标准)
语法:基于回调函数(默认)
const fs = require("node:fs")
fs.readFile()
定义
readFile()方法用于(异步)读取文件内容。
语法
fs.readFile('文件路径',callback)
fs.readFile('文件路径',(err,data) => {
if(err) console.log(err)
console.log(data)
})
返回值
返回读取成功的内容。
数据类型:buffer
示例
const fs = require("node:fs")
const content = fs.readFile('./data.text','utf-8',(err,data)=>{
if(err){
console.log(err);
}else{
console.log(data)
}
})
输出//hello
fs.writeFile()
定义
writeFile() 用于异步的写入文件数据。
语法
fs.writeFile(file, data[, options], callback)
返回值
示例
const fs = require("node:fs")
fs.writeFile('./data.md','hello',(err)=>{
if(err){
console.log(err);
}else{
console.log('成功')
}
})
输出//成功
npm是什么
-
NPM 是"Node Package Manager"的缩写,意思:Node软件包管理工具
-
NPM的主要内容
- 安装软件包
- 删除软件包
- 分享你自己写的软件包(npmjs.com)
-
NPM是世界上最大软件包平台。
-
NPM的构成:
- 官网(npmjs.com): 查询软件包
- CLI(Command Line Interface):命令行交互工具
- 软件注册表:JS软件包的仓库
package是什么
- 意思:软件包
- 一个package由1个或多个module组成。
package.json是什么
-
用于描述你的模块文件。
-
用于配置你的模块文件。
-
package.json描述了如何使用模块文件。
-
一个pacakge(软件包)必须包含一个
package.json文件。 -
package.json文件的创建方法:
- 手动创建
- 半自动:npm init命令创建
- 自动:npm init --yes命令创建
node_modules
- 用于存储第三方模块的文件
- 打包项目发给别人之前,可删除node_modules文件夹,以减少文件体积。
- 注意:package.json和package-lock.json不能删
- 可使用
npm install重新安装模块
module
- 模块就是一个js文件或文件夹
- 模块必须拥有
package.json文件
第三方模块的使用方法
第一步:创建文件夹
mkdir my-package
第二步:创建index.js
cd my-package
New-item index.js
第三步:安装upper-case模块
npm install upper-case
第四步:修改index.js内容
const upperCase = require('upper-case').upperCase
function hello(name){
console.log(upperCase(`hello${name},welcome to you
!`));
}
hello('zs')
module.exports = hello
第五步:运行index.js
node index
输出结果
HELLOZS,WELCOME TO YOU!
版本号
NPM采用的是Sementic Version Controls系统
语法
X.Y.Z
1.1.3
初始版本号一般默认:0.1.0
正式发布:1.0.0
X : Major Version 主版本号:较大变化
Y: Minor Version 副版本号:增加了一个函数
Z: patch Version Bug版本号:修复bug
项目介绍
【问候】:同学们好!老师好!我是xxx。
【项目介绍】
第一部分:介绍项目名称:图库APP
第二部分:效果展示
-
导航效果展示:什么时候显示? 什么时候隐藏?
屏幕变宽的时候显示导航,屏幕变窄的时候隐藏导航
-
图片效果展示:无限加载
- 第一组图片默认加载20张
- 滚动条滑动到底,加载第二组图片
- 再次滑动到底,加载第三组图片
第三部分:项目技术介绍
这个项目一共用到了几种技术:
-
导航菜单使用的boostrap框架实现的。
-
图片数据使用的免费数据接口
-
加载图片使用了三种技术
-
AJAX /Fetch API
- fetch是基于ajax请求
-
懒加载
- 懒加载就是按需加载。需要就加载,不需要就不加载,针对多图片的页面,只有当该图片出现在页面视区中,再加载该图片。可以防止页面一次性加载完所有的图片,用户等待时间长,影响用户体验。懒加载主要运用了滚动事件,这时候我遇到了一个问题:滚动的时候它会无限调用。在这里我用了一个开关控制,一组数据加载完就关闭,下一组数据加载时打开
-
瀑布流(图片排列)
- 瀑布流是一种流式布局,它把内容分成多个模块从左到右依次排列,这些模块的宽度通常是相同的,但高度却不相同。当第二组内容被添加到页面上时,它会寻找各列之中所有元素高度之和的最小者,并将新的元素添加到该列上,然后继续寻找所有列的各元素之和的最小者,继续添加至该列上,如此循环下去,直至所有元素均能够按要求排列为止
-
http内置模块
http.createServer()
定义
createServer()用于创建Node服务器
-
创建
-
res对象:使用响应
-
响应头:用于通知浏览器
- 状态码
- 数据类型是什么
- 数据
- 其他参数
-
-
req对象:使用请求对象解析请求头
-
请求头:包含了请求的具体信息
- 请求方法:get post put delete
- 请求数据
- 请求的地址
- 浏览器的信息
-
语法
http.createServer((请求,响应)=> {})
http.createServer((req,res)=> {
res.writeHead()
res.end()
})
返回值
无
示例
http.createServer((req,res)=>{
// res.writeHead(200)
res.writeHead(200,{"Content-Type":"text/plain"})
// res.end('这是服务器发了的响应结果')
res.end('Server is running on http://127.0.0.1:3000')
})
res.writeHead()
定义
用于设置响应头信息
语法
res.writeHead(200,{"Content-Type":"text/plain"})
参数
参数1:必选,三位数的http状态码
参数2:可选,可有可无
参数3:可选,告诉浏览器我发给你的数据是什么类型的
示例
res.writeHead(200,{"Content-Type":"text/plain"})
res.end()
定义
用于通知客户端响应结束。结束的时候可以携带一些数据
语法
res.end('字符串')
参数
只接受服务器响应数据,如果是中文则会乱码
返回值
无
示例
res.end('Server is running on http://127.0.0.1:3000')
server.listen()
定义
用于设置服务器的监听端口
语法
server.listen(port, function(){ // the first argument is *not* a potential error /第一个参数*not*是一个潜在的错误});
参数1:端口号
返回值
- 该方法除了回调函数外没有其他要返回的内容
示例
server.listen(3000,()=>{
console.log('服务器已经运行在:http://127.0.0.1:3000');
})
Node监听
定义
Node监听就是在不重启服务器的情况下,自动刷新页面
语法
node --wath 文件地址
示例
node --wath 'index.js'
Conten-Type
定义
Content-Type用于指定响应头的数据类型。
语法
{"Content-Type": 属性值}
属性值
- text/plain:返回普通文本
- text/html:返回html文本
- application/json:返回json文本
写服务器的步骤
- const server = 引入http模块
- 用方法createServer创建一个服务器
- 服务器监听请求server.listen()
- 设置服务器的运行端口号
0327
知识点
-
习惯使用搜索打开APP
-
5个命令。每人创建一个命令笔记,专门整理命令
-
学会使用环境变量(全局变量)
-
命令行使用技巧
-
Node.js中的module是什么?
是一个内置的全局对象、用于表示模块
-
NodeJS中的module系统分为几种?
两种:CommonJS模块系统、ECMAScript模块系统
-
NodeJS中的module分为几种?
本地模块、内置模块、第三方模块
命令行使用技巧
-
打开命令行
- 全局打开:搜索框=>输入power
- 定位文件夹打开:按住shift+右键
-
快速补全:输入一个字母+tab键可以补充全名
-
快速查询上一条录入:使用
上方向键
cd命令
定义
cd命令用于改变目录。cd即:change die
示例
#bash
cd images
#进入当前目录下的images目录
cd ./images
#进入上一级目录下的aaa目录
cd ../aaa
#进入当前硬盘的根目录
cd /
#进入当前用户的根目录
cd ~
pwd
定义
pwd用于显示当前目录
ls
定义
ls用于查看当前目录下的内容(文件和文件夹)
mkdir
定义
用于创建文件夹 “make directory”
示例
#在当前目录下创建一个aaa的文件夹
mkdir aaa
#在当前用户桌面上创建一个bbb文件夹
mkdir ~/desktop/bbb
##在根目录下创建一个ccc的文件夹
mkdir /ccc
rm
定义
用于删除指定的目录或文件 “remove”的缩写
参数
-r 递归删除
-f 强制删除 f:force :强制、暴力、武力
示例
文件目录分两种:空目录和非空目录
- users
- projectA (删除projectA)
- index.html
- css
- style.css
clear清屏
new-item
创建文件
new-item index.html
Node.js
Node是什么
Node.js是一个基于V8引擎运行环境。
- v8引擎:JS的渲染器
Node.js是一个服务器平台。
Node.js底层使用C++编写的。
Node.js是安装在操作系统上的一个程序,这个程序的工作的时候是跟操作系统在对话。(交互)
Node执行js的方式
在Node.js中,运行js代码的方式有两种
-
直接运行js文件:node app.js
-
使用
REPL模式运行js代码- R:Read读取js代码
- E: Execute执行JS代码
- P:Print打印js代码
- L: Loop 循环js代码
NodeJS VS 浏览器
| Node.js | 浏览器 | |
|---|---|---|
| 语法相同 | 支持ECMAScript | 支持ECMAScript |
| API不同 | Global、module、buffer、domain等 | BOM、DOM |
| 老大不同 | Global | window |
| 交互对象 | 在node.js运行js,是和操作系统对话 | 在浏览器中运行js,是和浏览器对话 |
module API是什么
- module是一个内置的全局对象
- module用于表示模块
- 模块:模块就是封装在一个js文件中的代码(在Node的模块系统中,每一个js文件都是一个模块)
const sum = (a,b) =>{
return a + b
}
const minus = (a,b) =>{
return a - b
}
module对象
> module
Module {
id: '<repl>',
path: '.',
exports: {},
filename: null,
loaded: false,
children: [],
paths: [
'/Users/zj/Desktop/7/0327/repl/node_modules',
'/Users/zj/Desktop/7/0327/node_modules',
'/Users/zj/Desktop/7/node_modules',
'/Users/zj/Desktop/node_modules',
'/Users/zj/node_modules',
'/Users/node_modules',
'/node_modules',
'/Users/zj/.node_modules',
'/Users/zj/.node_libraries',
'/usr/local/lib/node'
]
}
NodeJS中的module系统分为几种?
模块系统的背景
-
JS缺点1:没有模块
-
JS缺点2:存在命名冲突(set map 模块)
<head> <script src='./jquery.js'></script> <script scr='./tquery.js'></script> <script scr='./script.js'></script> </head> -
CommonJS : 面向服务器 通过
Require() -
RequireJS: 基于CommonJS的一个包装。
-
AMD: Asynchrouns Module D? :面向浏览器
Node.js的模块系统分为两种
- CommonJS: Node.js的默认模块系统。采用第三方的模块系统。
- ECMAScript: 是Node.js的标准模块系统。(向原生语言看齐)
NodeJS中的module分为几种?
-
本地模块:在项目中,由开发者创建的模块。
-
内置模块:由Node.js提供的预设模块。
- 内置模块是全局模块。
- 内置模块是Node.js的核心模块。
-
第三方模块: 在项目中,由其他开发者创建的模块。
NPM是什么
- NPM: Node Package Manager Node软件包管理器
- NPM就是Node.js平台的商店。
CommonJS模块系统
module对象
定义
- module对象表示一个模块。
- 一个JS文件就是一个模块。
- 模块是封装在js文件中代码块,拥有独立的作用域,Node会把任何一个js文件看成一个模块。
- module对象是一个全局对象
module.prototype.require()
定义
require()方法用于加载外部模块。
require()是node的一个内置函数。require()在工作的时候,它用于包裹(读取+执行)模块文件中的代码块。
语法
module.require(id)
require(id) //module是全局对象,可省略
Id: 表示加载的模块的文件名
返回值
返回从模块文件中导出的模块
module.exports
定义
module.exports 用于暴露/导出/分享模块。(暴露作用域)
module.exports是一个对象。Module.exports用于包裹要导出的模块。
语法
//语法1:导出单个变量(变量名、函数名、类名)
const sum = (a,b) => {
return a + b
}
module.exports = sum //单个变量名
//语法2:导出单个直接量
module.exports = (a,b) => {
return a + b
}
//语法3:导出多个变量
const sum = (a,b) => {
return a + b
}
const minus = (a,b) => {
return a - b
}
module.exports = {
// sum:sum,
// minus: minus
sum,
minus
}
//语法4:导出多个变量
module.exports.sum = (a,b) => {
return a + b
}
module.exports.minus = (a,b) => {
return a - b
}
//语法5:导出多个变量
module.exports = {
sum : (a,b) => {
return a + b
},
minus : (a,b) => {
return a - b
}
}
//语法6:导出多个变量
const obj = {
sum : (a,b) => {
return a + b
},
minus : (a,b) => {
return a - b
}
}
module.exports = obj
App1.js
const math = module.require('./lib1')
// math = {sum,minus}
const {sum,minus} = math
console.log(sum(2,3));
console.log(minus(2,3));