摘要:全局對象中一個對象,該對象為全局對象。在客戶端中,該對象為,由進行指向中的全局對象為,所有的全局變量,除了自己以外都是對象的屬性全局對象和全局變量全局變量是全局對象的宿主表示當(dāng)前正在執(zhí)行的腳本名,將會輸出文件位置所在的絕對路徑。
node全局對象
js中一個對象,該對象為全局對象。
在客戶端中,該對象為whindow,由this進行指向
node中的全局對象為global,所有的全局變量,除了自己以外都是global對象的屬性
全局變量是全局對象的宿主
_filename表示當(dāng)前正在執(zhí)行的腳本名,將會輸出文件位置所在的絕對路徑。
如果在模塊中,返回的是模塊文件的路徑。
PS C:UsersmingmDesktop est> node main.js C:UsersmingmDesktop estmain.js PS C:UsersmingmDesktop est>
// 輸出全局變量 __filename的值 console.log(__filename);__dirname
表示當(dāng)前執(zhí)行腳本所在的目錄
PS C:UsersmingmDesktop est> node main.js C:UsersmingmDesktop est PS C:UsersmingmDesktop est>
console.log(__dirname);setTimeout
function printHello() { console.log("hello word"); }; // 兩秒后執(zhí)行以上函數(shù) setTimeout(printHello, 2000); // 該函數(shù)返回一個代表定時器的句柄值
function printHello() { console.log("hello word"); }; // 兩秒后執(zhí)行以上函數(shù) setTimeout(printHello, 2000); // 該函數(shù)返回一個代表定時器的句柄值clearTimeout
停止一個計時器
settlnterval一個計時器會不斷的調(diào)用,返回的是一個代表定時器的句柄值
function printHello() { console.log("hello word!"); }; // 每兩秒后循環(huán)執(zhí)行以上函數(shù) setInterval(printHello, 2000);
PS C:UsersmingmDesktop est> node main.js hello word! hello word! hello word! hello word! hello word! hello word! hello word! hello word! hello word!process
一個全局變量,即global對象的屬性
用于描述當(dāng)前node進程狀態(tài)的對象。
process.on("exit", (code) => { // 下方代碼不會執(zhí)行 setTimeout(() => {console.log("該代碼不會執(zhí)行");}, 0); console.log("退出碼為", code); }); console.log("程序執(zhí)行結(jié)束");
PS C:UsersmingmDesktop est> node main.js 程序執(zhí)行結(jié)束 退出碼為 0 PS C:UsersmingmDesktop est>一個示例文件
// 輸出到終端 process.stdout.write("hello world!" + " "); // 創(chuàng)建一個寫入流,通過寫入流,輸出到終端 // 通過參數(shù)讀取 process.argv.forEach((val, index, array) => {console.log(val + index + array)}); // 獲取執(zhí)行路徑 console.log(process.execPath); // 平臺信息 console.log(process.platform);
PS C:UsersmingmDesktop est> node main.js hello world! C:Program Files odejs ode.exe0C:Program Files odejs ode.exe,C:UsersmingmDesktop estmain.js C:UsersmingmDesktop estmain.js1C:Program Files odejs ode.exe,C:UsersmingmDesktop estmain.js C:Program Files odejs ode.exe win32 PS C:UsersmingmDesktop est>
PS C:UsersmingmDesktop est> node main.js { rss: 18874368, heapTotal: 6066176, heapUsed: 3677376, external: 8272 } PS C:UsersmingmDesktop est>
// 輸出內(nèi)存使用情況 console.log(process.memoryUsage());node文件系統(tǒng)
node提供一組類似unix的標(biāo)準(zhǔn)文件操作api
異步和同步異步的方法后面會有一個回調(diào)函數(shù)
貌似回調(diào)多了以后會產(chǎn)生回調(diào)地獄
var fs = require("fs"); // 異步讀取 fs.readFile("input.txt", (err, data) => { err?console.error(err):true; console.log("異步讀取" + data.toString()); });
PS C:UsersmingmDesktop est> node main.js 異步讀取33333333333333333333333333333333333333333 PS C:UsersmingmDesktop est>
ps 減少異步,讓世界更美好一點(^o^)/打開文件
建議回調(diào)使用箭頭函數(shù),要不然很容易產(chǎn)生回調(diào)地獄,讓人抓狂
// 打開input.txt文件進行讀寫 var fs = require("fs"); // 異步打開文件 console.log("準(zhǔn)備打開文件!"); fs.open("input.txt", "r+", (err, fd) => {err?console.log(err):console.log("文件打開成功!");});
PS C:UsersmingmDesktop est> node main.js 準(zhǔn)備打開文件! 文件打開成功!獲取文件信息
fs模塊下的stat方法
判斷是否是文件
var fs = require("fs"); fs.stat("input.txt", (err, stats) => {console.log(stats.isFile());});
PS C:UsersmingmDesktop est> node main.js true PS C:UsersmingmDesktop est>
var fs = require("fs"); console.log("準(zhǔn)備打開文件!"); fs.stat("input.txt", (err, stats) => {err?console.log(err):console.log(stats); console.log("讀取文件信息成功!"); // 檢測文件類型 console.log(stats.ifFile()); console.log(stats.isDirectory()); });
PS C:UsersmingmDesktop est> node main.js 準(zhǔn)備打開文件! Stats { dev: 982976588, mode: 33206, nlink: 1, uid: 0, gid: 0, rdev: 0, blksize: undefined, ino: 12103423998567884, size: 41, blocks: undefined, atimeMs: 1532607165034.9072, mtimeMs: 1532606924599.2798, ctimeMs: 1532606924599.2798, birthtimeMs: 1532606914067.3428, atime: 2018-07-26T12:12:45.035Z, mtime: 2018-07-26T12:08:44.599Z, ctime: 2018-07-26T12:08:44.599Z, birthtime: 2018-07-26T12:08:34.067Z } 讀取文件信息成功! C:UsersmingmDesktop estmain.js:7 console.log(stats.ifFile()); ^ TypeError: stats.ifFile is not a function at fs.stat (C:UsersmingmDesktop estmain.js:7:20) at FSReqWrap.oncomplete (fs.js:159:5) PS C:UsersmingmDesktop est>寫入文件
var fs = require("fs"); console.log("準(zhǔn)備寫入文件"); fs.writeFile("input.txt", "我是異步寫入的內(nèi)容", (err) => { err?console.log(err):false; console.log("數(shù)據(jù)寫入成功!"); console.log("----我是分割線----"); console.log("開始讀取寫入的數(shù)據(jù)"); fs.readFile("input.txt", (err, data) => { err?console.log(err):false; console.log("異步讀取數(shù)據(jù)為" + data.toString()); }); });
PS C:UsersmingmDesktop est> node main.js 準(zhǔn)備寫入文件 數(shù)據(jù)寫入成功! ----我是分割線---- 開始讀取寫入的數(shù)據(jù) 異步讀取數(shù)據(jù)為我是異步寫入的內(nèi)容 PS C:UsersmingmDesktop est>讀取文件
在異步的情況下讀取文件
參數(shù) http://nodejs.cn/api/fs.html#...
使用的fs.read http://nodejs.cn/api/fs.html#...
var fs = require("fs"); var buf = new Buffer.alloc(1024); // 創(chuàng)建一個緩沖區(qū) console.log("準(zhǔn)備打開已存在的文件"); fs.open("input.txt", "r+", (err, fd) => { if (err) { console.log(err); }; console.log("文件打開成功"); console.log("準(zhǔn)備讀取文件"); fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => { if (err) { console.log(err); }; console.log(bytes + "字節(jié)被讀取"); // 輸出讀取的字節(jié) if (buyes > 0) { console.log(buf.slice(0, bytes).toString()); } }); });
PS C:UsersmingmDesktop est> node main.js 準(zhǔn)備寫入文件 數(shù)據(jù)寫入成功! ----我是分割線---- 開始讀取寫入的數(shù)據(jù) 異步讀取數(shù)據(jù)為我是異步寫入的內(nèi)容 PS C:UsersmingmDesktop est>
Buffer.slice http://nodejs.cn/api/buffer.html
返回一個指向相同原始內(nèi)存的新建的 Buffer
PS C:UsersmingmDesktop est> node main.js 準(zhǔn)備打開已存在的文件 文件打開成功 準(zhǔn)備讀取文件 27字節(jié)被讀取 我是異步寫入的內(nèi)容 PS C:UsersmingmDesktop est>
var fs = require("fs"); var buf = new Buffer.alloc(1024); // 創(chuàng)建一個緩沖區(qū) console.log("準(zhǔn)備打開已存在的文件"); fs.open("input.txt", "r+", (err, fd) => { if (err) { return console.log(err); }; console.log("文件打開成功"); console.log("準(zhǔn)備讀取文件"); fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => { if (err) { console.log(err); }; console.log(bytes + "字節(jié)被讀取"); // 輸出讀取的字節(jié) if (bytes > 0) { console.log(buf.slice(0, bytes).toString()); } }); });關(guān)閉文件
在異步的模式下關(guān)閉文件
PS C:UsersmingmDesktop est> node main.js 準(zhǔn)備打開文件! 文件打開成功! 準(zhǔn)備讀取文件! 我是異步寫入的內(nèi)容 文件關(guān)閉成功 PS C:UsersmingmDesktop est>
var fs = require("fs"); var buf = new Buffer.alloc(1024); console.log("準(zhǔn)備打開文件!"); fs.open("input.txt", "r+", (err, fd) => { if (err) { return console.log(err); }; console.log("文件打開成功!"); console.log("準(zhǔn)備讀取文件!"); fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => { if (err) { console.log(err); }; // 輸出能讀取的字節(jié) if(bytes > 0) { console.log(buf.slice(0,bytes).toString()); }; // 關(guān)閉文件 fs.close(fd, (err) => { if(err) { console.log(err); }; console.log("文件關(guān)閉成功"); }); }); });截取文件
在異步的模式下截取文件
fs.ftruncate(fd[, len], callback)
http://nodejs.cn/api/fs.html#...
var fs = require("fs"); var buf = new Buffer.alloc(1024); console.log("準(zhǔn)備打開文件!"); fs.open("input.txt", "r+", (err, fd) => { if (err) { return console.error(err); }; console.log("文件打開成功!"); console.log("截取了10字節(jié)后的文件內(nèi)容。"); // 截取文件 fs.ftruncate(fd, 10, (err) => { if (err) { console.log(err); }; console.log("文件截取成功"); console.log("讀取相同的文件"); fs.read(fd, buf, 0, buf.length, 0, (err, bytes) => { if (err) { console.log(err); }; // 僅輸出讀取的字節(jié) if (bytes > 0) { console.log(buf.slice(0, bytes).toString()); } // 關(guān)閉文件 fs.close(fd, (err) => { console.log(err); }); console.log("文件關(guān)閉成功!"); }); }); });
PS C:UsersmingmDesktop est> node main.js 準(zhǔn)備打開文件! 文件打開成功! 截取了10字節(jié)后的文件內(nèi)容。 文件截取成功 讀取相同的文件 我是異? 文件關(guān)閉成功! null PS C:UsersmingmDesktop est>刪除文件
PS C:UsersmingmDesktop est> node main.js 準(zhǔn)備刪除文件! 文件刪除成功! PS C:UsersmingmDesktop est>
var fs = require("fs"); console.log("準(zhǔn)備刪除文件!") fs.unlink("input.txt", (err) => { if (err) { return console.log(err); }; console.log("文件刪除成功!"); });創(chuàng)建目錄
PS C:UsersmingmDesktop est> node main.js 創(chuàng)建目錄 ./tmp/test { [Error: ENOENT: no such file or directory, mkdir "C:UsersmingmDesktop est mp est"] errno: -4058, code: "ENOENT", syscall: "mkdir", path: "C:UsersmingmDesktop est mp est" } PS C:UsersmingmDesktop est>
var fs = require("fs"); console.log("創(chuàng)建目錄 ./tmp/test"); fs.mkdir("./tmp/test", (err) => { if (err) { return console.log(err); }; console.log("目錄創(chuàng)建成功!"); });讀取目錄
forEach方法沒有找到一個 官方文檔,貌似目前找不到
PS C:UsersmingmDesktop est> node main.js 查看 /tmp 目錄 { [Error: ENOENT: no such file or directory, scandir "C:UsersmingmDesktop est mp"] errno: -4058, code: "ENOENT", syscall: "scandir", path: "C:UsersmingmDesktop est mp" } PS C:UsersmingmDesktop est>
var fs = require("fs"); console.log("查看 /tmp 目錄"); fs.readdir("./tmp/", (err, files) => { if (err) { return console.log(err); }; files.forEach((file) => { // 這個方法目前沒有找到,聯(lián)系到客戶端的方法,貌似是合并的意思 console.log( file ); }); });博客
www.iming.info
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/96306.html
摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時間有限,資源有限。事件驅(qū)動機制是通過內(nèi)部單線程高效率地維護事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭對于熟練掌握J(rèn)S語言后的廣義Node.js.至于為什么...
摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時間有限,資源有限。事件驅(qū)動機制是通過內(nèi)部單線程高效率地維護事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭對于熟練掌握J(rèn)S語言后的廣義Node.js.至于為什么...
摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時間有限,資源有限。事件驅(qū)動機制是通過內(nèi)部單線程高效率地維護事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭對于熟練掌握J(rèn)S語言后的廣義Node.js.至于為什么...
摘要:基礎(chǔ)篇整合最近有朋友也想學(xué)習(xí)相關(guān)方面的知識,如果你是后端想接近前端,作為一門跑在服務(wù)端的語言從這里入門再好不過了。事件驅(qū)動機制是通過內(nèi)部單線程高效率地維護事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文的切換。 nodeJs 基礎(chǔ)篇整合 最近有朋友也想學(xué)習(xí)nodeJs相關(guān)方面的知識,如果你是后端想接近前端,node作為一門跑在服務(wù)端的JS語言從這里入門再好不過了。如果你正好喜歡前端,...
閱讀 3614·2021-11-24 10:25
閱讀 2531·2021-11-24 09:38
閱讀 1224·2021-09-08 10:41
閱讀 2910·2021-09-01 10:42
閱讀 2580·2021-07-25 21:37
閱讀 1986·2019-08-30 15:56
閱讀 919·2019-08-30 15:55
閱讀 2755·2019-08-30 15:54