撰寫下面的代碼,我希望在服務器啟動或開始偵聽期間發生的錯誤將在catch塊中捕獲。
const HTTP = require("http");
try {
HTTP.
createServer((request, response) => {
console.log(request);
console.log(response);
}).
listen(3000, () => { console.log("started") });
} catch (error) {
console.error(error);
}
事實上,這并沒有發生。例如,如果執行上述檔案的兩個實體,第二個實體將與
Error: listen EADDRINUSE: address already in use :::3000
uj5u.com熱心網友回復:
您可以使用
process.on('uncaughtException', function(e){
console.log(e);
});
處理未捕獲的例外。任何來自 Web 服務器的未處理例外都可以像這樣被捕獲。
uj5u.com熱心網友回復:
您需要監聽error事件以獲取錯誤訊息。
server.on('error', (err) => {
throw err;
});
更完整的代碼
const net = require('net');
const server = net.createServer((c) => {
// 'connection' listener.
console.log('client connected');
c.on('end', () => {
console.log('client disconnected');
});
c.write('hello\r\n');
c.pipe(c);
});
// NOTICE THIS CODE BLOCK
server.on('error', (err) => {
throw err;
});
server.listen(8124, () => {
console.log('server bound');
});
如您所見server.on('error'),正在偵聽發出的錯誤并將其扔回。您可以將其包裝在 try catch 塊中以獲取錯誤。
uj5u.com熱心網友回復:
自己使用和監聽事件的另一種方法server.on是做出等待listening和error事件的承諾。
const HTTP = require("http");
const { once } = require("events");
(async function() {
try {
const server = HTTP.
createServer((request, response) => {
console.log(request);
console.log(response);
});
server.listen(3000, () => { console.log("started") });
await once(server, 'listening');
console.log('started (2)');
} catch (error) {
console.error(error);
}
})();
筆記:
- 在某些情況下,您只能
await在函式之外使用(“頂級等待”),因此這個示例包含在(async function() {})() oncelistening將在尚未發出時捕獲錯誤。一旦listening發出,代碼就會繼續。- 閱讀更多關于
events.once這里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/430785.html
標籤:节点.js
上一篇:可以驗證陣列中的元素嗎?
