2016-08-19 39 views
0

在Express应用程序的结束之前响应我愿做这样的事情:Express.js发送执行

app.get('/some/route', someMiddleWare(), function(req, res){ 
    var status = undefined; 
    if(/*someCondition*/) status = 200; 
    else status = 403 

    res.status(status).send(''); 

    // do something else 
}) 

在第一部分我这样做是必要的,以解码给什么东西响应,在第二个(在send()之后),我做了一些额外的事情,需要在同一个执行中完成(即不是异步),但并不真正关心用户。 现在的问题是:我可以肯定,在send()返回后,响应已经回到用户的路上了吗?还是仅在执行处理函数后才发送? 谢谢

回答

0

的问题是:我可以肯定的是send()返回后的反应 已经在它的方式返回给用户?还是只有在执行我的处理函数后才发送?

是的,您可以确定数据正在运行。在您拨打res.send()时,数据已写入底层TCP基础架构,然后由TCP堆栈发送。由于TCP Nagle算法,在发送数据之前可能会有一段很短的延迟,但它不会等待Express应用程序中的任何内容。数据将在TCP堆栈决定发送时立即发送。

在发送响应之后,您是否在请求处理程序中执行其他操作并不重要。

如果您想要关注此实际源代码,请首先查看res.send(data) in express,最终最终会调用res.end(data) in the http module。而且,通过查看http模块,可以看到它在调用时将数据同步写入TCP实现。在Express中没有任何魔法延迟等待其他事情发生。

1

是的。即使在通过res.send()发送数据后,代码也会在函数中执行。

但是,在您使用res.send()后,您将不能再发送任何其他数据,并使用该请求的相同响应。