全局變量
__dirname
定義
1.全局變量 2.當(dāng)前目錄名
__dirname表示當(dāng)前文件(模塊)所在的目錄名稱。
- Dir: directory 文件夾、目錄
- Name: 名字
語(yǔ)法
console.log(__dirname) //全局直接調(diào)用
示例
console.log(__dirname)
輸出
D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲
------------------------------
/Users/zj/Desktop/7/0329
絕對(duì)路徑 VS 相對(duì)路徑
#區(qū)分絕對(duì)路徑和相對(duì)路徑?
# 絕對(duì)路徑 (不帶斜杠)
\Users\zj\Desktop\7\0329
\zj\Desktop\7\0329
\Desktop\7\0329
----------------------------
# 相對(duì)路徑有三種(點(diǎn)帶斜杠或不帶斜杠)
images/aaa.jpg
./images/aaa.jpg
../images/aaa.jpg
__filename
定義
1.全局變量 2.當(dāng)前文件名
__filename表示當(dāng)前文件(模塊)的名稱。
- file: 文件
- Name: 名字
示例
console.log(__filename)
輸出
D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲\__dirname.js
--------------
/Users/zj/Desktop/7/0329/1-global.js
內(nèi)置模塊 Path
定義
node:path 是一個(gè)內(nèi)置模塊。它提供了處理路徑的API。路徑分為:
- 文件路徑
- 文件夾路徑
使用path模塊,第一步做什么?
- 8大方法
1、path.basename()
定義:路徑的最后一部分
語(yǔ)法
path.basename('路徑','刪除的后綴名')
返回值
返回 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:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲\1basename.js
1basename.js
1basename
亂敲
----------
/Users/zj/Desktop/7/0329/2-path.js
2-path.js
2-path
0329
2、path.dirname(path)
定義
dirname()用于返回當(dāng)前目錄的路徑。
語(yǔ)法
path.dirname('path')
返回值:返回當(dāng)前路徑;
示例
const path=require("node:path")
console.log(path.dirname('path'));
輸出
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲> node 2path.dirname.js
.
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲>
3、path.extname(path)
定義
返回的是當(dāng)前文件的擴(kuò)展名。
語(yǔ)法
path.extname(path)
返回值:當(dāng)前文件夾的擴(kuò)展名;
示例:
const path=require("node:path")
console.log(path.extname(__filename));
輸出:
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲> node 3path.extname.js
.js
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲>
4、path.parse()
定義
parse() 方法:從路徑字符串返回一個(gè)對(duì)象。
語(yǔ)法
path.parse('路徑')
返回值
返回一個(gè)表示路徑的對(duì)象。
示例
console.log(__filename);
console.log(path.parse(__filename));
輸出
{
root: 'D:\\',
dir: 'D:\\vscode 學(xué)習(xí)html前端\\全局變
量的方法\\亂敲',
base: '4path.parse.js',
ext: '.js',
name: '4path.parse'
}
---------------------
{
root: '/',
dir: '/Users/zj/Desktop/7/0329',
base: '2-path.js',
ext: '.js',
name: '2-path'
}
5、path.format()
定義
format()方法:從路徑對(duì)象轉(zhuǎn)路徑字符串。
語(yǔ)法
path.format(路徑對(duì)象)
返回值
返回路徑字符串
示例
const obj = path.parse(__filename)
console.log(path.format(obj));
輸出
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲> node 5path.format.js
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲>
6、path.join()
定義
join()方法用于把路徑片段連接為規(guī)范路徑。
簡(jiǎn)言之:連接路徑片段。
語(yǔ)法
path.join()
path.join('路徑片段1','路徑片段2',...)
返回值
返回一個(gè)拼接好的規(guī)范的路徑
示例
const p1 = path.join('fold1','folder2','index.html')
console.log(p1);
const p2 = path.join('/fold1','folder2','index.html')
console.log(p2);
const p3 = path.join('/fold1','//folder2','index.html')
console.log(p3);
const p4 = path.join('/fold1','//folder2','./index.html')
console.log(p4);
const p5 = path.join('/fold1','//folder2','../index.html')
console.log(p5);
輸出
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲> node 6path.join.js
fold1\folder2\index.html
\fold1\folder2\index.html
\fold1\folder2\index.html
\fold1\folder2\index.html
\fold1\index.html
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲>
-------------------
fold1/folder2/index.html
/fold1/folder2/index.html
/fold1/folder2/index.html
/fold1/folder2/index.html
/fold1/index.html
7、path.isAbsolute()
定義
isAbsolute()方法用于檢測(cè)一個(gè)路徑是否是絕對(duì)路徑。
語(yǔ)法
path.isAbsolute(path)
返回
返回布爾值 :true 或 false
示例
const path=require("node:path")
console.log(path.isAbsolute(__filename));//true
console.log(path.isAbsolute('./data.json')); //false
---------------
const path=require("node:path")
console.log(path.isAbsolute(__filename));//true
console.log(path.isAbsolute(__dirname));//true
8、path.resolve()
定義
resolve()方法用于解析為絕對(duì)路徑。
語(yǔ)法
path.resolve([...paths])//路徑片段
返回值
**
**返回絕對(duì)路徑字符串
示例
const p1 = path.resolve('fold1','folder2','index.html')
folder1/folder2/index.html
/Users/zj/Desktop/7/0329/
/Users/zj/Desktop/7/0329/fold1/folder2/index.html
console.log(p1);
const p2 = path.resolve('/fold1','folder2','index.html')
console.log(p2);
const p3 = path.resolve('/fold1','/folder2','index.html')
console.log(p3);
const p4 = path.resolve('/fold1','//folder2','./index.html')
console.log(p4);
const p5 = path.resolve('/fold1','/folder2','../hello.html')
console.log(p5);
輸出:
D:\vscode 學(xué)習(xí)html前端\全局變量的方法\亂敲\fold1\folder2\index.html
D:\fold1\folder2\index.html
D:\folder2\index.html
D:\folder2\index.html
D:\hello.html
FS模塊(FS系統(tǒng))
定義:
fs文件系統(tǒng)模塊,允許操作計(jì)算機(jī)系統(tǒng)上的文件。
- 讀取文件
- 創(chuàng)建文件
- 修改文件
- 刪除文件
引入Fs文件系統(tǒng)
- 引入
引入基于 promise 的 API(標(biāo)準(zhǔn)):
import * as fs from 'node:fs/promises';
const fs = require('node:fs/promises');
引入回調(diào)和同步的 API(默認(rèn)):
import * as fs from 'node:fs';
const fs = require('node:fs');
所有文件系統(tǒng)操作都具有同步、回調(diào)和基于 promise 的形式,并且可以使用 CommonJS 語(yǔ)法和 ES6 模塊進(jìn)行訪問(wèn)。
fs.readFile()
用于異步讀取文件內(nèi)容
語(yǔ)法:
fs.readFile("文件路徑",callback)
fs.readFile("文件路徑",(err,data)=>{if(err) console.log(data)})
返回值:返回讀取到的內(nèi)容
數(shù)據(jù)類型:buffer(二進(jìn)制)
實(shí)例:
默認(rèn):
const content = fs.readFile("./data.txt",(err,data)=>{
if(err){
console.log(err);
}else{
console.log(data);//<Buffer 68 65 6c 6c 6f 20 77 64 6f 6c 64>
}
})//異步讀取/
轉(zhuǎn)文本:
const content = fs.readFile("./data.txt","utf-8",(err,data)=>{
if(err){
console.log(err);
}else{
console.log(data);//hello wdold
}
})//異步讀取/
fs.writeFile()
語(yǔ)法:
fs.writeFile("要寫入的文件","要寫入的字符串",(err)=>{
if(err){
console.log(失敗時(shí)返回err);
}else{
console.log("成功");
}
})
返回值:根據(jù)回調(diào)函數(shù)
實(shí)例:
const fs = require("node:fs")
fs.writeFile("./data.txt","cctv",(err)=>{
if(err){
console.log(err);
}else{
console.log("成功");
}
})
NPM是什么?
- NPM 是"Node Package Manager"的縮寫,意思:Node軟件包管理工具
- NPM的主要內(nèi)容
- 安裝軟件包
- 刪除軟件包
- 分享你自己寫的軟件包(npmjs.com)
- NPM是世界上最大軟件包平臺(tái)。
- NPM的構(gòu)成:
- 官網(wǎng)(https://npmjs.com): 查詢軟件包
- CLI(Command Line Interface):命令行交互工具
- 軟件注冊(cè)表:JS軟件包的倉(cāng)庫(kù)
package是什么
- 意思:軟件包
- 一個(gè)package由1個(gè)或多個(gè)module組成。
package.json是什么
用于描述你的模塊文件。
用于配置你的模塊文件。
package.json描述了如何使用模塊文件。
一個(gè)pacakge(軟件包)必須包含一個(gè)
package.json文件。-
package.json文件的創(chuàng)建方法:
手動(dòng)創(chuàng)建
半自動(dòng):npm init命令創(chuàng)建
自動(dòng):npm init --yes命令創(chuàng)建
node_modules
- 用于存儲(chǔ)第三方模塊的文件
- 打包項(xiàng)目發(fā)給別人之前,可刪除node_modules文件夾,以減少文件體積。
- 注意:package.json和package-lock.json不能刪
- 可使用
npm install重新安裝模塊
module
- 模塊就是一個(gè)js文件或文件夾
- 模塊必須擁有
package.json文件
第三方模塊的使用方法
第一步:創(chuàng)建文件夾
mkdir buhaoqi-package
第二步:創(chuàng)建index.js
cd buhaoqi-package
New-item index.js
第三步:安裝upper-case模塊
npm install upper-case
第四步:修改index.js內(nèi)容
const upperCase = require('upper-case').upperCase
function hello(name){
console.log(upperCase(`hello ${name},good good study!`));
}
hello('zhangsan')
module.exports = hello
第五步:運(yùn)行index.js
node index
輸出結(jié)果
HELLO ZHANGSAN,GOOD GOOD STUDY!
NPM(管理模塊)詳細(xì)版!NPM總結(jié)
- 定義:
- NPM: Node Package Manager Node縮寫;
- 意思:軟件包管理器;
- NPM就是Node.js平臺(tái)的商店。
-NPM的主要內(nèi)容: - 安裝軟件包;
- 刪除安裝包;
- 分享你自己的軟件包;(npm.zs.com
) - NPM是世界上最大軟件包平臺(tái);
- NPM的構(gòu)成:
- 官網(wǎng):https://npmjs.com:查詢軟件包;- CLi(Command Line Interface):命令行交互工具
- 軟件注冊(cè)表:JS軟件包倉(cāng)庫(kù);
module
- 模塊就是一個(gè)js文件或文件夾
- 所有的模塊必須擁有一個(gè)package.json
package
- 定義:
- 意思:軟件包
- 一個(gè)package由一個(gè)或多個(gè)模塊組成;
package.json (創(chuàng)建package方法有幾種?)
- 1.clx-package(自定義手動(dòng)創(chuàng)建軟件包方法)
2.index.js //配置你的模塊
3.package2.json;
- 2.npm init命令創(chuàng)建
- 3.npm init--yes命令創(chuàng)建
定義: - 用于描述你的模塊文件;
- 用于配置你的模塊文件;
- package.json描述了如何使用軟件包;
- 一個(gè)package(軟件包)必須包含一個(gè)package.json 文件;
示例:1.2.3
--------------------
// 1.clx-package(自定義手動(dòng)創(chuàng)建軟件包方法)
2.index.js //配置你的模塊
3.package2.json;
-------------------
//2.半自動(dòng)創(chuàng)建
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\clx-pack> npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help init` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (clx-pack) clx-pack
version: (1.0.0) 1.0.0
description: clx hello package
entry point: (index.js) index.js
test command:
git repository:
keywords: "clx"
author: "clx-pack"
license: (ISC) "clx-pack"
Sorry, license should be a valid SPDX license expression (without "LicenseRef"), "UNLICENSED", or "SEE LICENSE IN <filename>".
license: (ISC)
About to write to D:\vscode 學(xué)習(xí)html前端\全局變量的方法\clx-pack\package.json:
{
"name": "clx-pack",
"version": "1.0.0",
"description": "clx hello package",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"\"clx\""
],
"author": "\"clx-pack\"",
"license": "ISC"
}
Is this OK? (yes) yes
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\clx-pack>
--------------------
//3.全自動(dòng)
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\clx-pack> npm init --yes
Wrote to D:\vscode 學(xué)習(xí)html前端\全局變量的方法\clx-pack\package.json:
{
"name": "clx-pack",
"version": "1.0.0",
"description": "clx hello package",//關(guān)鍵詞/依賴于模塊
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"\"clx\""
],
"author": "\"clx-pack\"",
"license": "ISC"
}
PS D:\vscode 學(xué)習(xí)html前端\全局變量的方法\clx-pack>
版本號(hào)
NPM采用的是Sementic Version Controls系統(tǒng)
語(yǔ)法
X.Y.Z
1.1.3
初始版本號(hào)一般默認(rèn):0.1.0
正式發(fā)布:1.0.0
X : Major Version 主版本號(hào):較大變化
Y: Minor Version 副版本號(hào):增加了一個(gè)函數(shù)
Z: patch Version Bug版本號(hào):修復(fù)bug
————————————————————————————
node_modules
- 用于存儲(chǔ)第三方軟件的文件夾;
http.createServer()
- 定義:用于創(chuàng)建一個(gè)NOde服務(wù)器。主要做了兩件事:
- 處理請(qǐng)求
- 處理響應(yīng)
- 語(yǔ)法:
http.createServer({選項(xiàng)對(duì)象},監(jiān)聽函數(shù)(回調(diào)函數(shù)))
- 選項(xiàng)對(duì)象:可選參數(shù),是一個(gè)Object,通過(guò)選項(xiàng)對(duì)象,傳入一些參數(shù);
- 監(jiān)聽函數(shù):是一個(gè)回調(diào)函數(shù)。當(dāng)用戶請(qǐng)求從端口進(jìn)來(lái)后,該函數(shù)立刻被調(diào)用;
- Request對(duì)象:請(qǐng)求對(duì)象
- 包含已請(qǐng)求有關(guān)的信息;
- Reaponse對(duì)象:響應(yīng)對(duì)象;
- 包含已響應(yīng)有關(guān)的信息;
- 返回值:返回一個(gè)Server對(duì)象;
- 示例:
server.listen()
- 定義:監(jiān)聽端口
- 語(yǔ)法:
server.listen([port[, host[, backlog]]][, callback])
- `handle` [<Object>]
- `backlog` [<number>]
- `callback` [<Function>]
* 返回: [<net.Server>](http://url.nodejs.cn/DixUe8)
- 端口
- 主機(jī)名
-
1、res.setHeader()
- 定義:用于使用單個(gè)值設(shè)置響應(yīng)頭。設(shè)置響應(yīng)頭信息;(使用一個(gè)值)
特點(diǎn) - 只能設(shè)置一個(gè)值
- 重復(fù)出現(xiàn)
- 優(yōu)先級(jí)低于res.writeHeader()
- 語(yǔ)法:
- 返回值:無(wú);
- 示例:
res.setHeader('Concent-Type',"text/html")
-------
res.setHeader('Concent-Type':"text/pilan")
--
res.setHeader('Concent-Type':"text/json")
2、res.write()
定義:寫入數(shù)據(jù)
語(yǔ)法:
- 數(shù)據(jù)
- 字符編碼
- 返回值:布爾值
3、res.writeHead()
- 定義:設(shè)置響應(yīng)頭信息;
特點(diǎn) - 只能設(shè)置一個(gè)值
- 只能執(zhí)行一次
- 優(yōu)先級(jí)高于res.setHeader()
- 語(yǔ)法:
- 返回值:返回一個(gè)響應(yīng)對(duì)象。以便鏈?zhǔn)秸{(diào)用;
- 示例:
4、res.end()
- 定義:用于通知服務(wù)器響應(yīng)結(jié)束;??
- 語(yǔ)法:
responese.end([data[,encoding],
- 返回值:返回this
- 示例: