我在一些网站上读到,在express.js中,“任何异步代码中未捕获的错误可能会导致DoS崩溃HTTP服务器”。我做了这个例子来检查它,但我想知道为什么如果错误发生在express回调内部,服务器不会崩溃,但如果它发生在setTimeout()函数内部,则服务器会崩溃。
这两个示例中不都是异步代码中发生错误吗?还是其中一个不是异步的,我弄错了吗?为什么某些异步代码中的未捕获错误会使服务器崩溃,而其他异步代码中不会呢?
这两个示例中不都是异步代码中发生错误吗?还是其中一个不是异步的,我弄错了吗?为什么某些异步代码中的未捕获错误会使服务器崩溃,而其他异步代码中不会呢?
var express = require("express");
var app = express();
http: app.get("/e1", (req, res, next) => {
let p = req.query.p;
let pn = parseInt(p, 10);
//If the error happens here the server does not crashes
let s = pn + y; // y does not exist, so an error occurs
res.send("hi");
});
http: app.get("/e2", (req, res, next) => {
let p = req.query.p;
let pn = parseInt(p, 10);
setTimeout(() => {
//If the error happens here the server crashes
let s = pn + y; // y does not exist, so an error occurs
}, 100);
res.send("hi");
});
app.listen(3000, function() {
console.log("Example app listening on port 3000!");
});