node.js基礎
標簽: node.js
node.js基礎
note.js簡介
-
Nodejs運行:node 文件名.js
-
DOS常用命令
cls 清屏
dir 列出當前目錄下的所有文件
cd 目錄名 進入到指定的目錄
md 目錄名 創建一個文件夾
rd 目錄名 刪除一個文件夾(只能刪除空文件夾)
cd .. 返回上層目錄
cd 命令,就是change directory的縮寫,表示更改當前目錄。
- Nodejs 特點
- 1.單線程:Google V8是單線程的;
- 好處:一個線程響應多個連接,系統不再有線程創建、銷毀的時間開銷。
- 壞處:就是一個用戶造成了線程的崩潰,整個服務都會受到部分影響。
- 2. 非阻塞I/O機制:即多任務機制,也稱異步機制,其在執行一個任務的時候,不會等待任務執行完畢再繼續執行,而是繼續執行下一個任務,當任務執行完畢后,以事件的形式通知執行I/O的線程,此時線程會執行這個事件的
回調函數
。 - 3.事件環機制:又稱事件驅動,根據當前出現的事件,調動資源進行相關的處理
Node.js特征
- Nodejs全局對象:Node.js中的全局對象是global,所有全局變量(除了global本身以外)都是global對象的屬性。相當于瀏覽器中的
window對象。注:ES6語法中,通過let和const聲明的全局變量不會綁定在global的屬性上。 - Nodejs全局變量:global 最根本的作用是作為全局變量的宿主。按照ECMAScript的定義,滿足以下條件的變量是全局變量:
- 1)在最外層定義的變量;
- 2)全局對象的屬性;
- 3)隱式定義的變量(未定義直接賦值的變量)。
注:請不要使用var定義變量以避免引入全局變量,因為全局變量會污染命名空間,提高代碼的耦合風險。
- __dirname :__dirname屬性,獲取當前文件的父級路徑,返回值是一個絕對路徑
- __filename:__filename屬性,獲取當前文件的絕對路徑
// console.log(global);//node中的全局對象
// console.log(globalThis);//跨平臺全局對象?ES2020
// console.log(arguments);//不要使用......
console.log(__dirname);console.log(__filename);
Buffer模塊
- 概念:Buffer模塊是Node的核心類庫,提供了一種原始的數據存儲方法(即二進制形式存儲數據)。
注
:雖然Buffer的存儲方式為二進制,但其輸出的表現形式為十六進制。 - Buffer的初始化
- 1、Buffer.alloc(size[, fill[, encoding]]),開辟一個指定大小的緩存區空間
- size,設置緩存區空間的大小,單位為字節
- fill,設置緩存區初始化的值,注:完全填滿,默認值是0
- encoding,編碼格式,默認值是"utf8"
let buf=Buffer.alloc(1024,"ab","utf8");
console.log(buf);
- 2、Buffer.from(string[, encoding]),將指定字符串轉換為Buffer類型,并存儲在緩存區,它是按需開辟空間。
- string,設置需要存儲的字符串
- encoding,編碼格式,默認值是"utf8"
let buf=Buffer.from("我是憨憨");
console.log(buf.toString());
- 3、buf.toString([encoding[, start[, end]]])
- encoding,編碼格式,默認值是"utf8"
- start,設置讀取緩存區的起始位置。默認值是0
- end,設置讀取緩存區的結束位置。默認值是
buf.length
- Node環境中一個中文三個字節
let buf=Buffer.from("我是憨憨!");
console.log(buf.toString("utf8",3,12));
- 4、buf.write(string[, offset[, length]][, encoding]),將指定字符串寫入到當前緩存區
- string,設置需要寫入緩存區的字符串
- offset,設置寫入的起始位置,默認值是0
- length,設置寫入的長度,默認值是 buf.length - offset/寫入字符串的總長度
- encoding,編碼格式,默認值是"utf8"
let buf=Buffer.from("我是憨憨!憨憨!憨憨!憨 憨!");//創建一個大小為15字節的緩存區
buf.write("你說的沒錯!",3,9);//將字符串寫入當前緩存區,如果寫入數據過長,多出來的字符會被忽略。
console.log(buf.toString());
- 5、buf.toJSON(),將緩存區數據以JSON對象的格式輸出,數據是對應的十進制數
let buf=Buffer.from("我是憨憨!");
console.log(buf);
console.log(buf.toJSON());
- 6、**Buffer.concat(list[, totalLength])**合并多個緩存區,并生成新的緩存區,深拷貝合并
- list,設置需要合并的緩存區,是數組的形式
- totalLength,設置新緩存區的總長度,默認值是所有合并緩存區的和。
let buf=Buffer.from("我是憨憨!");
let buf1=Buffer.from("你說的沒錯!");
let buf2=Buffer.from("giao giao!");
let newBuf=Buffer.concat([buf,buf1,buf2],18);
buf.write("哈哈");
console.log(buf.toString());
console.log(newBuf.toString());
- 7、buf.length獲取當前緩存區的長度
let buf2=Buffer.from("giao giao!");
console.log(buf2.length);
模塊化
- 模塊的概念:為了代碼擁有更好的維護性,經常會把多個函數分組,分別放到不同的文件里,這樣,每個文件包含的代碼就相對較少,很多編程語言都采用這種組織代碼的方式。在Node.js中,一個js文件就稱之為一個模塊(Module)。
- 模塊的好處:可以提高代碼的維護性和可復用性。避免函數名和變量名的沖突。
- 模塊化的方式:ES5中沒有原生支持模塊化,我們只能通過script標簽引入js文件來實現模塊化。在node中為了對模塊管理,引入了CommonJS規范。
- 1、定義模塊:在CommonJS規范中,一個單獨的JS文件就是一個模塊。在該模塊內部定義的變量,無法被其他模塊讀取,除非定義為global對象的屬性。
- 2、拋出模塊:模塊只有一個出口,module.exports/exports,我們需要把需要輸出的內容放入該代碼塊內。
- 3、引入模塊:引入模塊使用require()方法,該方法讀取一個文件并執行,返回文件使用
module.exports/exports拋出的名字。 - 拋出模塊:
let username="rypy";
let age=20;
let sex="男";
function f(){
return "我是方法";
}
//拋出的關鍵詞:module.exports和exports
//exports是module.exports的引用(實例)。實際實現功能的還是module.exports
//暴露拋出,有且只能拋出一次,且不能使用exports
// module.exports=username;
// module.exports=ages;
//對象的形式拋出,此情況可以支持多方法或多屬性拋出,支持混合拋出,(推薦使用)
// module.exports={//以對象形式拋出的時候可以改變鍵名,從對屬性或方法進行重名
// u:username,
// age,
// sex,
// f
// }
//屬性的形式拋出,可以支持多拋出
module.exports.aa=username;//module.exports={aa:username}
exports.aa=age;//實際執行的代碼module.exports={aa:username}
module.exports.aa=sex;
module.exports.bb=f;
- 引入模塊:
let aaa=require("./1");//require引入模塊如果模塊是js文件可以省略后綴名。
console.log(aaa);
// console.log(aaa.age);
// console.log(aaa.f());
智能推薦
node.js基礎了解
node.js的特點 單線程:只有一個線程執行任務 非堵塞I/O:在I/O耗時操作時,線程不堵塞 事件驅動:使用事件驅動程序往下繼續運行 node,js模塊化 規范:遵循common.js規范 加載模塊的時候同步。當遇到require() 語句時,會停下來等加載完成然后繼續往下執行。 暴露模塊的時候推薦...
node.js基礎入門
為什么學習node.js node.js可以輔助前端開發,代替后端開發(但其還是不能和java比),node.js與php相比來說,他的優點是:性能高,開發效率高,應用范圍廣,其缺點是:新型語言,函數少,ide(開發環境,編譯器)不完善 什么是node.js? node.js是基于chrome v8引擎的JavaScript運行環境。node...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
猜你喜歡
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...