Node.js函數
在JavaScript中,一個函數可以作為另一個函數的參數,可以先定義一個函數,然后進行傳遞,也可以在傳參的地方直接定義
function sayhello(){console.log("hello");
}
function run(hello, value){hello();console.log(value);
}
run(sayhello, 1);
hello
1
匿名函數
不需要定義函數的名字,直接進行調用即可
function execute(somefunc, value){somefunc(value);
}
execute(function(value){console.log(value);
},"Hello!");
實例:通過函數的匿名傳遞讓http服務工作
var http = require("http");
http.createServer(function(request, response) {response.writeHead(200, {"Content-Type": "text/plain"});response.write("Hello World");response.end();
}).listen(8888);
這種方法類似于go語言的handler
Node.js路由
我們需要的所有的數據都被包含于request對象中,該對象作為onRequest()回調函數的第一個參數傳遞,但是為了解析這些數據,我們需要包含額外的node.js模塊,分別為url和querystring模塊
var http = require("http");
var url = require("url");
function start(){function onRequest(request, response){var pathname = url.parse(request.url).pathname;console.log("Request for "+pathname+" received.");response.writeHead(200, {"Content-Type":"text/plain"});response.write("HW");response.end();}http.createServer(onRequest).listen(8888);console.log("Server launch!");
}
exports.start = start;
全局對象
JavaScript中有一個特殊的對象,稱為全局對象(Global Object),它及其所有的屬性都可以在程序的任何地方進行訪問,即全局變量
瀏覽器中通常window是全局對象,而node.js中的全局對象是global,所有全局變量都是global對象的屬性
我們可以直接訪問到global的屬性
全局對象與全局變量
global的最根本的作用是作為全局變量的宿主
滿足下列變量的為全局變量
- 在最外層定義
- 全局對象的屬性
- 隱式定義,直接賦值的變量
當你定義一個全局變量時,這個變量同時也會成為全局對象的屬性,最好不要使用 var 定義變量以避免引入全局變量,因為全局變量會污染命名空間,提高代碼的耦合風險。
__filename
__filename——當前正在執行的腳本名,將輸出絕對路徑,且和命令行參數所指定的文件名不一定相同。
console.log(__filename);
__dirname
__dirname——當前執行的腳本所在的目錄
console.log(__dirname);
setTimeout(cb, ms)
全局函數,在指定的事件結束之后指定函數cb,但是僅僅執行一遍函數,返回一個代表計時器的句柄值
function sayHello(){console.log("Hello!");
}
setTimeout(sayHello, 2000);
clearTimeout(t)
停止作用在全局的計時器,參數t是全局計時器的一個句柄
function sayHello(){console.log("Hello!");
}
var t = setTimeout(sayHello, 2000);
clearTimeout(t);
setInterval(cb,ms)
和setTimeout類似,但是會循環調用某一個函數,直到被清除
function printHello(){console.log("Hello!");
}
let interval = globalThis.setInterval(printHello, 3000);
function clear(){globalThis.clearInterval(interval);
}
global.setTimeout(clear, 10000);
console
console是一個標準的控制臺輸出,原來是IE的內部調試工具,后來成為實際標準
- console.log()打印字符串
- console.info()返回消息型數據,除了chrome,其他會返回藍色的驚嘆號
- console.error()輸出錯誤消息,返回紅叉
- console.warn()警告消息,黃色驚嘆號
- console.dir()對一個對象進行檢查,并以易于閱讀和打印的格式進行顯示
- console.time()輸出事件表示計時開始
- console.timeEnd()結束時間表示計時結束
- console.trace()當前執行的代碼在堆棧中的調用路徑,這個測試函數運行很有幫助,只要給想測試的函數里面加入 console.trace 就行了。
- console.assert()用于判斷某個表達式或變量是否為真,接收兩個參數,第一個參數是表達式,第二個參數是字符串。只有當第一個參數為false,才會輸出第二個參數,否則不會有任何結果。\
progress
是一個全局變量,global的屬性
描述當前的node.js的進程狀態的對象,提供了一個與操作系統的簡單接口
- exit
當進程準備退出時候觸發 - beforeExit
當node清空時間循環,并且沒有任何其他的安排的時候這個事件會被觸發 - uncaughtExpection
當一個異常冒泡回到事件循環,觸發這個事件。如果給異常添加了監視器,默認的操作(打印堆棧跟蹤信息并退出)就不會發生。 - Signal 事件
當進程接收到信號時就觸發。信號列表詳見標準的 POSIX 信號名,如 SIGINT、SIGUSR1 等。
process.on('exit', function(code) {// 以下代碼永遠不會執行setTimeout(function() {console.log("該代碼不會執行");}, 0);console.log('退出碼為:', code);
});
console.log("程序執行結束");
process提供了很多的有用屬性,比如stdout、執行參數argv等
詳見:https://www.runoob.com/nodejs/nodejs-global-object.html