当前位置: 首页 > 面试题库 >

为什么在“ res.send”之后执行代码?

况弘新
2023-03-14
问题内容

我想知道以下代码的行为背后的机制是什么:

res.send(200, { data: 'test data' });
console.log('still here...');

我的理解是res.send返回 函数,而是 关闭连接/结束请求
。这可以解释为什么我仍然可以在res.send命令后执行代码(我查看了快速源,但它似乎不是异步函数)。

还有其他我可能会想念的东西吗?


问题答案:

当然可以end结束HTTP响应,但是它对您的代码没有做任何特殊的事情。

即使您已结束回复,也可以继续做其他事情。

但是,您 无法 做的是利用进行任何有用的操作res。由于响应结束,因此您无法向其写入更多数据。

res.send(...);
res.write('more stuff'); // throws an error since res is now closed

此行为与其他传统框架(PHP,ASP等)不同,其他传统框架将线程分配给HTTP请求并在响应结束时终止线程。如果调用类似ASP的等效函数Response.End,则线程终止并且您的代码停止运行。在节点中,没有线程要停止。
req并且res不会再触发任何事件,但是回调中的代码可以自由继续运行(只要它不尝试调用res需要打开有效响应的方法即可)。



 类似资料:
  • 我还检查了调试,它将语句=>if(sum==1)返回true;但它也在执行更多的语句。

  • NodeJS/Express:什么是“app.use”?我读了这篇文章,仍然对这个程序中的控制流感到困惑。为什么如果我访问“localhost:3000/add product”,记录的结果是“这总是运行!在add product中间件中!这总是运行!在另一个中间件中!”(我省略了变更行)这是否意味着在它进入第二个应用程序之后。如我所知,使用每个应用程序。每次向服务器发送请求时都会调用use(中间

  • 问题内容: 我有一个相当简单的Express.js应用程序,带有一个登录组件,如果登录失败,我想尽早退出。我看到有迹象表明该应用程序没有执行此操作,也没有找到明确的答案来表明调用是否停止任何进一步的处理。这是我现在的代码: 如果我正确地阅读了源代码,它 应该 结束请求(终止进一步的处理),但是我是Node的新手,所以我还没有准备好相信我认为的内容。归根结底,我想我主要是在寻找更可靠的资源来获得最终

  • 问题内容: 在下面的示例中(来自我的Coursepack),我们希望给该Square实例c1一些其他对象的引用p1,但前提是这两个对象是兼容类型的。 我在这里不明白的是,我们首先检查p1确实为Square,然后仍将其强制转换。如果是Square,为什么要投射? 我怀疑答案在于表观类型和实际类型之间的区别,但是我还是很困惑…… 编辑: 编译器将如何处理: Edit2: 是instanceof检查实际

  • 据我所知,promise是可以解析()或拒绝()的东西,但我惊讶地发现,promise中的代码在调用解析或拒绝后仍继续执行。 我认为resolve或reject是exit或return的异步友好版本,它将停止所有立即的函数执行。 有人能解释一下为什么下面的示例有时在解析调用后显示console.log的背后思想吗: 杰斯宾

  • 问题内容: 为什么这样 代替这个 问题答案: 因为如果抛出异常,则 除非 捕获到异常, 否则 在执行 该块之后没有任何代码。一个块总是执行,不管你里面发生了什么块。 __