【前端】Node.js一本通

近兩天更新完畢,建議關注收藏點贊。

目錄

  • 復習
  • Node.js概述
  • 使用
    • fs文件系統模塊
    • path路徑模塊
  • http模塊

復習

  1. 為什么JS可以在瀏覽器中執行
    原理:待執行的JS代碼->JS解析引擎
    不同的瀏覽器使用不同的 JavaScript 解析引擎:其中,Chrome 瀏覽器的 V8 解析引擎性能最好!
    Chrome 瀏覽器 => V8
    Firefox 瀏覽器 => OdinMonkey(奧丁猴)
    Safari 瀏覽器 => JSCore
    IE 瀏覽器 => Chakra(查克拉)
  2. 為什么 JavaScript 可以操作 DOM 和 BOM
    每個瀏覽器都內置了 DOM、BOM 這樣的 API 函數,因此,瀏覽器中的 JavaScript 才可以調用它們。
    在這里插入圖片描述
  3. 瀏覽器中JS運行環境
    總結:V8 引擎負責解析和執行 JavaScript 代碼。內置 API 是由運行環境提供的特殊接口,只能在所屬的運行環境中被調用。
    在這里插入圖片描述
  4. 學習路徑總結
  • 瀏覽器中的 JavaScript 學習路徑:
    JavaScript 基礎語法 + 瀏覽器內置 API(DOM + BOM) + 第三方庫(jQuery、art-template 等)
  • Node.js 的學習路徑:
    JavaScript 基礎語法 + Node.js 內置 API 模塊(fs、path、http等)+ 第三方 API 模塊(express、mysql 等)

Node.js概述

  • Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環境。nodejs官網
  • 運行環境
    瀏覽器是 JavaScript 的前端運行環境。
    Node.js 是 JavaScript 的后端運行環境。
    Node.js 中無法調用 DOM 和 BOM 等瀏覽器內置 API。
  • 功能
    Node.js 作為一個 JavaScript 的運行環境,僅僅提供了基礎的功能和 API。在此基礎上,運用很多強大的工具和框架。
    基于 Express 框架(http://www.expressjs.com.cn/),可以快速構建 Web 應用
    基于 Electron 框架(https://electronjs.org/),可以構建跨平臺的桌面應用
    基于 restify 框架(http://restify.com/),可以快速構建 API 接口項目
    讀寫和操作數據庫、創建實用的命令行工具輔助前端開發…
工具/框架簡介特點
Express.js用于構建Web應用和API的輕量級框架簡潔、快速、支持RESTful API、強大的路由功能
NestJS基于TypeScript的現代化Node.js框架,適用于企業級應用支持TypeScript、模塊化架構、易于集成各種庫
Koa.js由Express原班人馬開發的框架,目標是更小更強大支持async/await、靈活的中間件機制
Hapi.js強大的Web框架,注重可擴展性和靈活性強大的插件系統、內置驗證、路由和錯誤處理功能
Sails.js基于Express的MVC框架,適合數據驅動的API應用支持WebSockets、ORM、MVC結構
Socket.io實現實時、雙向通信的JavaScript庫支持WebSocket、易于集成、支持廣播和房間功能
Electron.js使用Web技術構建跨平臺桌面應用跨平臺、支持豐富的原生API
Gulp.js基于流的JavaScript任務運行器,用于自動化前端任務流式任務系統、插件豐富、易于配置
Grunt.jsJavaScript任務運行器,自動化前端開發流程配置簡潔、插件支持廣泛
PM2Node.js進程管理工具,支持生產環境的應用管理進程管理、負載均衡、日志管理、性能監控
MongooseMongoDB的ODM庫,簡化與MongoDB的交互Schema支持、數據驗證、查詢構建、模型功能強大
  • 安裝
    LTS是長期穩定版 企業項目推薦安裝
node -v #查看版本

使用

  • 在 Node.js 環境中執行 JavaScript 代碼
node js_path

補充終端快捷鍵
tab快速補全路徑
esc快速清空當前已輸入命令
cls清空終端

  • 實例:將html文件中的js css部分拆出來成一單獨文件
[\s\S] 只匹配 一個字符;
[\s\S]* 才是匹配 任意數量的字符(包括 0 個);
[\s\S]*? 是非貪婪地匹配任意數量字符,直到匹配到后續的模式。
const fs=require('fs')
const path=require('path')
const regStyle=/<style>[\s\S]*<\/style>/
const regScript=/<script>[\s\S]*<\/script>/
fs.readFile(path.join(__dirname,'index.html'),'utf8',(err,datastr)=>{if(err)return console.log('文件讀取失敗'+err.message)resolveCSS(datastr)resolveJS(datastr)resolveHTML(datastr)
})function resolveCSS(htmlstr){const r1=regStyle.exec(htmlstr)const newcss=r1[0].replace('<style>','').replace('</style>','')fs.writeFile(path.join(__dirname,'index.css'),newcss,err=>{if(err)return console.log('文件寫入失敗'+err.message)console.log('css寫入成功')})
}function resolveJS(htmlstr){const r2=regScript.exec(htmlstr)const newjs=r2[0].replace('<script>','').replace('</script>','')fs.writeFile(path.join(__dirname,'./index.js'),newjs,err=>{if(err)return console.log('文件寫入失敗'+err.message)console.log('js寫入成功')})
}function resolveHTML(htmlstr){const newhtml=htmlstr.replace(regStyle,'<link rel="stylesheet" href="./index.css"/>').replace(regScript,'<script src="./index.js"></script>')fs.writeFile(path.join(__dirname,'./index.html'),newhtml,err=>{if(err)return console.log('文件寫入失敗'+err.message)console.log('html寫入成功')})
}
  • 實例:實現clock時鐘的web服務器
    把文件的實際存放路徑,作為每個資源的請求 url 地址。
    在這里插入圖片描述
const http=require('http')
const fs=require('fs')
const path=require('path')
const server=http.createServer()
server.on('request',function(req,res){const url=req.urllet fpath=''//const fpath=path.join(__dirname,url)if(url==='/'){fpath=path.join(__dirname,'./clock/index.html')}else{fpath=path.join(__dirname,'./clock',url)}fs.readFile(fpath,'utf8',(err,datastr)=>{if(err)return res.end('404 not found')res.end(datastr)})
})
server.listen(80,function(){console.log('listening')
})

fs文件系統模塊

fs模塊是nodejs提供的用來操作文件的模塊。
fs.writeFile() 方法只能用來創建文件,不能用來創建路徑
重復調用 fs.writeFile() 寫入同一個文件,新寫入的內容會覆蓋之前的舊內容

//js中用fs模塊操作文件
const fs=require('fs')//導入fs.readFile(path,[options],callback)
//參數2 可選 編碼格式
//參數3 文件讀取完成,通過回調函數拿到讀取結果fs.readFile('./path.txt','utf8',function(err,datastr){if(err)return console.log('文件讀取失敗'+err.message)//err=null時讀取成功,反之讀取失敗,datastr=undefinedconsole.log(datastr)
})fs.writeFile(file_path,data.[options],callback)
//data 要寫入file的內容
//callback 文件寫入完成后的回調函數
//是否寫入成功也是判斷err
  • 路徑動態拼接的問題
    在使用 fs 模塊操作文件時,如果提供的操作路徑是以 ./ 或 …/ 開頭的相對路徑時,很容易出現路徑動態拼接錯誤的問題。
    原因:代碼在運行的時候,會以執行 node 命令時所處的目錄,動態拼接出被操作文件的完整路徑。
    解決方案:在使用 fs 模塊操作文件時,直接提供完整的路徑,不要提供 ./ 或 …/ 開頭的相對路徑,從而防止路徑動態拼接的問題。
    __dirname 是 Node.js 中的一個全局變量,它表示當前模塊(文件)所在的目錄的絕對路徑。它在所有模塊中都可用,并且通常用于拼接路徑,方便訪問文件系統中的其他文件。
//__dirname: /Users/yourname/projectfs.readFile(__dirname+'/path.txt','utf8',function(err,datastr){if(err)return console.log('文件讀取失敗'+err.message)//err=null時讀取成功,反之讀取失敗console.log(datastr)
})

path路徑模塊

path 模塊是 Node.js 官方提供的、用來處理路徑的模塊。凡是后端(不是前端)涉及路徑拼接的操作,用這個模塊,不要用+進行字符串拼接。

const path=require('path') //導入path.join([...paths])//多個路徑片段連接const filePath = path.join(__dirname, 'data', 'file.txt');
console.log(filePath);
// 輸出:/Users/yourname/project/data/file.txtpath.basename(path,[ext])
//獲取路徑的最后一部分,用于獲取路徑中的文件名
//ext 可選,文件擴展名const fpath='/a/b/c/index.html'
var filename=path.basename(fpath)
var name_without_ext=path.basename(fpath,'.html')path.extname(path)//獲取擴展名部分
const fext=path.extname(fpath)

http模塊

http 模塊是 Node.js 官方提供的、用來創建 web 服務器的模塊。通過 http 模塊提供的 http.createServer() 方法,就能方便的把一臺普通的電腦,變成一臺 Web 服務器,從而對外提供 Web 資源服務。
在 Node.js 中,我們不需要使用 IIS、Apache 等這些第三方 web 服務器軟件。因為我們可以基于 Node.js 提供的 http 模塊,通過幾行簡單的代碼,就能輕松的手寫一個服務器軟件,從而對外提供 web 服務。

  • 創建 web 服務器的基本步驟
    導入 http 模塊
    創建 web 服務器實例
    為服務器實例綁定 request 事件,監聽客戶端的請求
    啟動服務器
const http=require('http')//導入
const server=http.createServer()//web服務器實例//為服務器實例綁定request事件 監聽客戶端發送過來的網絡請求
server.on('request',(req,res)=>{//只要有客戶端請求服務器,就會觸發request事件,調用這個事件處理函數const str=`req url is ${req.url},req method is ${req.method}`console.log('welcome',str)//防止中文亂碼res.setHeader('Content-Type','text/html;charset=utf-8')//res.end()向客戶端發送內容,并結束這次請求處理過程res.end(str)
})//根據不同url相應不同html內容
server.on('request',(req,res)=>{//只要有客戶端請求服務器,就會觸發request事件,調用這個事件處理函數const url=req.urllet content='<h1>404 not found</h1>'if(url==='/' || url==='/index.html'){content='<h1>welcome歡迎</h1>'}else if(url==='/about.html'){content='<h1>it\'s me這是我 </h1>'}//防止中文亂碼res.setHeader('Content-Type','text/html;charset=utf-8')//res.end()向客戶端發送內容,并結束這次請求處理過程res.end(content)
})//啟動服務器
server.listen(80,()=>{console.log('running')
})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75849.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75849.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75849.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AI論文】JavisDiT: 具備層次化時空先驗同步機制的聯合音視頻擴散Transformer

摘要&#xff1a;本文介紹了一種新型的聯合音頻-視頻擴散變換器JavisDiT&#xff0c;該變換器專為同步音頻-視頻生成&#xff08;JAVG&#xff09;而設計。 基于強大的擴散變換器&#xff08;DiT&#xff09;架構&#xff0c;JavisDiT能夠根據開放式用戶提示同時生成高質量的音…

Java-實現公有字段自動注入(創建人、創建時間、修改人、修改時間)

文章目錄 Mybatis-plus實現自動注入定義 MetaObjectHandler配置 MyBatis-Plus 使用 MetaObjectHandler實體類字段注解使用服務類進行操作測試 Jpa啟用審計功能實現自動注入添加依賴啟動類啟用審計功能實現AuditorAware接口實體類中使用審計注解 總結 自動注入創建人、創建時間、…

金融機構開源軟件風險管理體系建設

開源軟件為金融行業帶來了創新活力的同時&#xff0c;也引入了一系列獨特的風險。金融機構需要構建系統化的風險管理體系&#xff0c;以識別和應對開源軟件在全生命周期中的各種風險點。下面我們將解析開源軟件在金融場景下的主要風險類別&#xff0c;并探討如何建立健全的風險…

圖形渲染中的定點數和浮點數

三種API的NDC區別 NDC全稱&#xff0c;Normalized Device Coordinates Metal、Vulkan、OpenGL的區別如下&#xff1a; featureOpenGL NDCMetal NDCVulkan NDC坐標系右手左手右手z值范圍[-1,1][0,1][0,1]xy視口范圍[-1,1][-1,1][-1,1] GPU渲染的定點數和浮點數 定點數類型&a…

同花順客戶端公司財報抓取分析

目標客戶端下載地址:https://ft.51ifind.com/index.php?c=index&a=download PC版本 主要難點在登陸,獲取token中的 jgbsessid (每次重新登錄這個字段都會立即失效,且有效期應該是15天的) 抓取jgbsessid 主要通過安裝mitmproxy 使用 mitmdump + 下邊的腳本實現監聽接口…

QT工程建立

打開軟件新建一個工程 選擇chose 工程命名&#xff0c;選擇保存路徑&#xff0c;可以自己選擇&#xff0c;但是不要有中文路徑 默認的直接下一步 任意選一個下一步 點擊完成 之后是這個界面&#xff0c;點擊右下角的綠色三角形編譯一下 實驗內容 添加類 第一個是建立cpp和.h文件…

【NLP 53、投機采樣加速推理】

目錄 一、投機采樣 二、投機采樣改進&#xff1a;美杜莎模型 流程 改進 三、Deepseek的投機采樣 流程 Ⅰ、輸入文本預處理 Ⅱ、引導模型預測 Ⅲ、候選集篩選&#xff08;可選&#xff09; Ⅳ、主模型驗證 Ⅴ、生成輸出與循環 騙你的&#xff0c;其實我在意透了 —— 25.4.4 一、…

ffmpeg時間基與時間戳

時間基、時間戳 時間基&#xff1a;表示時間單位的分數&#xff0c;用來定義視頻或音頻流中時間的精度。其形式是一個分數&#xff0c;分子通常為 1&#xff0c;而分母則表示每秒的單位數。 時間戳&#xff1a;代表在時間軸里占了多少個格子&#xff0c;是特定的時間點。 時間…

激光加工中平面傾斜度的矯正

在激光加工中&#xff0c;加工平面的傾斜度矯正至關重要&#xff0c;直接影響加工精度和材料處理效果。以下是系統的矯正方法和步驟&#xff1a; 5. 驗證與迭代 二次測量&#xff1a;加工后重新檢測平面度&#xff0c;確認殘余誤差。 反饋優化&#xff1a;根據誤差分布修正補償…

算法刷題記錄——LeetCode篇(2.2) [第111~120題](持續更新)

更新時間&#xff1a;2025-04-04 算法題解目錄匯總&#xff1a;算法刷題記錄——題解目錄匯總技術博客總目錄&#xff1a;計算機技術系列博客——目錄頁 優先整理熱門100及面試150&#xff0c;不定期持續更新&#xff0c;歡迎關注&#xff01; 114. 二叉樹展開為鏈表 給你二…

C語言學習筆記-9

九、結構體 構造類型&#xff1a; 不是基本類型的數據結構也不是指針類型&#xff0c; 它是若干個相同或不同類型的數據構成的集合 結構體類型&#xff1a; 結構體是一種構造類型的數據結構&#xff0c;是一種或多種基本類型或構造類型的數據的集合。 1.結構體類型定義 定…

Test——BUG篇

目錄 一軟件測試的生命周期 二BUG 1概念 2描述Bug 3Bug級別 4Bug的生命周期 三與開發人員發生爭執怎么辦 ?編輯1先自省&#xff1a;是否Bug描述不清晰 2站在用戶角度考慮并拋出問題 3Bug定級有理有據 4不僅要提出問題&#xff0c;還要給出解決方案 5Bug評審 5.1…

【Block總結】HWAB,半小波注意力塊|即插即用

論文信息 標題: HALF WAVELET ATTENTION ON M-NET+ FOR LOW-LIGHT IMAGE ENHANCEMENT 地址: arXiv:2203.01296 日期: 2022年3月 創新點 改進的分層架構 M-Net+: 提出了一個專為低光圖像增強設計的改良分層模型 M-Net+。該架構旨在緩解采樣過程中的空間信息損失問題。通過采用…

Spring 中的事務

&#x1f9fe; 一、什么是事務&#xff1f; &#x1f9e0; 通俗理解&#xff1a; 事務 一組操作&#xff0c;要么全部成功&#xff0c;要么全部失敗&#xff0c;不能只做一半。 比如你轉賬&#xff1a; A 賬戶扣錢B 賬戶加錢 如果 A 扣了錢但 B 沒收到&#xff0c;那就出問…

Flutter極速接入IM聊天功能并支持鴻蒙

Flutter極速接入IM聊天功能并支持鴻蒙 如果你們也是Flutter項目&#xff0c;想快速接入聊天&#xff0c;包括聊天的UI界面&#xff0c;強烈推薦這一家。因為我們已經完成了集成&#xff0c;使用非常穩定&#xff0c;集成也非常快捷方便。 而且&#xff0c;就在今天&#xff0c…

C# 類庫生成后自動復制到指定目錄

C# 類庫生成后自動復制到指定目錄 在C#中,當你開發了一個類庫項目(通常是.NET Core或.NET Framework項目),你可能會希望在構建(Build)完成后自動將生成的DLL文件復制到指定的目錄。有幾種方法可以實現這個需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…

13-產品經理-產品多分支平臺管理

禪道16.0版本開始&#xff0c;優化和增強了產品的分支/平臺功能&#xff0c;主要特點如下&#xff1a; 多分支/平臺功能兼容各種大小型項目&#xff0c;項目/迭代可以關聯對應產品的某個分支/平臺。分支/平臺支持靈活管理&#xff0c;可以把分支/平臺理解為時間層面的概念&…

手搓多模態-04 歸一化介紹

在機器學習中&#xff0c;歸一化是一個非常重要的工具&#xff0c;它能幫助我們加速訓練的速度。在我們前面的SiglipVisionTransformer 中&#xff0c;也有用到歸一化層&#xff0c;如下代碼所示&#xff1a; class SiglipVisionTransformer(nn.Module): ##視覺模型的第二層&am…

Qt 入門 1 之第一個程序 Hello World

Qt 入門1之第一個程序 Hello World 直接上操作步驟從頭開始認識&#xff0c;打開Qt Creator&#xff0c;創建一個新項目&#xff0c;并依次執行以下操作 在Qt Creator中&#xff0c;一個Kits 表示一個完整的構建環境&#xff0c;包括編譯器、Qt版本、調試器等。在上圖中可以直…

深入理解MySQL:核心特性、優化與實踐指南

MySQL是一個開源的關系型數據庫管理系統(RDBMS)&#xff0c;由瑞典MySQL AB公司開發&#xff0c;目前屬于Oracle公司。它是目前世界上最流行的開源數據庫之一&#xff0c;廣泛應用于各種規模的Web應用和企業系統中。 目錄 一、核心特點 關系型數據庫&#xff1a; 開源免費&am…