Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js如何同步返回对REST web服务的响应?_Javascript_Node.js_Rest_Express_Promise - Fatal编程技术网

Javascript node.js如何同步返回对REST web服务的响应?

Javascript node.js如何同步返回对REST web服务的响应?,javascript,node.js,rest,express,promise,Javascript,Node.js,Rest,Express,Promise,如果这很明显,请原谅!我很难理解node.js如何响应来自浏览器的请求。我已经阅读了internet上的教程,其中express.js用于使用node.js构建rest服务器端代码。现在,除此之外,还设立了履行承诺的路线。因此,很明显,只有在承诺得到解决时,回应才会被发回。因此,流量将是- //一线 浏览器->休息服务 //二线 REST服务->查找路线->点击服务->获取数据->将数据发送回浏览器 第二行上的整个进程处于异步模式。那么,服务器端是否会挂起一个线程,浏览器将等待启用node.js

如果这很明显,请原谅!我很难理解node.js如何响应来自浏览器的请求。我已经阅读了internet上的教程,其中express.js用于使用node.js构建rest服务器端代码。现在,除此之外,还设立了履行承诺的路线。因此,很明显,只有在承诺得到解决时,回应才会被发回。因此,流量将是-

//一线

浏览器->休息服务

//二线

REST服务->查找路线->点击服务->获取数据->将数据发送回浏览器


第二行上的整个进程处于异步模式。那么,服务器端是否会挂起一个线程,浏览器将等待启用node.js的REST服务返回响应?如果不是这样,浏览器或REST客户端(如POSTMAN)如何实时知道响应

编辑:


由于外部链接造成混乱,我已将其删除。

nodejs不使用线程进行网络请求。它使用异步支持构建在操作系统中的网络。因此,nodejs中挂起的网络请求不会为每个请求维护一个打开的线程。它将有一个开放的插座。当该套接字上存在挂起的数据时,将通知nodejs进程

类似地,承诺不会导致线程打开。承诺只是一种通知方案,当异步操作完成时,底层异步操作将解析或拒绝该方案,然后承诺可以通知已注册
.then()
处理程序的代码

在您提供的链接中,不清楚您所指的代码是什么。如果您想询问那里的特定代码,请将该代码直接粘贴到您的问题中,以使问题清楚,并遵循stack overflow关于您所询问的代码的指导原则,即不要仅出现在外部链接中


第二行的整个进程处于异步模式。那么,服务器端是否会挂起一个线程,浏览器将等待启用node.js的REST服务返回响应

不清楚你说的“第二线”是什么意思。你提供的链接中有很多代码。NodeJ内部的网络请求不会对每个请求使用线程。它们保持一个开放的TCP套接字,但在操作系统中为套接字使用底层异步通知支持,而不是本机线程

如果不是这样,浏览器或REST客户端(如POSTMAN)如何实时知道响应


邮递员或REST客户机具有到服务器的TCP连接(在该TCP连接上使用HTTP协议)。他们创建TCP连接,然后在该套接字上发送HTTP请求,该套接字在等待响应时保持打开状态。当服务器完成其业务时,它会通过打开的TCP套接字发回响应。编写客户端代码的方式有很多种(邮递员和浏览器可能会以不同的方式编写客户端代码),但当数据到达TCP套接字时,客户端将以某种方式被通知有数据要读取,客户端将读取该数据,处理响应,然后由于这是HTTP请求/响应协议,TCP连接可能会关闭。

nodejs不使用线程进行网络请求。它使用异步支持构建在操作系统中的网络。因此,nodejs中挂起的网络请求不会为每个请求维护一个打开的线程。它将有一个开放的插座。当该套接字上存在挂起的数据时,将通知nodejs进程

类似地,承诺不会导致线程打开。承诺只是一种通知方案,当异步操作完成时,底层异步操作将解析或拒绝该方案,然后承诺可以通知已注册
.then()
处理程序的代码

在您提供的链接中,不清楚您所指的代码是什么。如果您想询问那里的特定代码,请将该代码直接粘贴到您的问题中,以使问题清楚,并遵循stack overflow关于您所询问的代码的指导原则,即不要仅出现在外部链接中


第二行上的整个进程处于异步模式。那么,服务器端是否会挂起一个线程,浏览器将等待启用node.js的REST服务返回响应

不清楚你说的“第二线”是什么意思。你提供的链接中有很多代码。NodeJ内部的网络请求不会对每个请求使用线程。它们保持一个开放的TCP套接字,但在操作系统中为套接字使用底层异步通知支持,而不是本机线程

如果不是这样,浏览器或REST客户端(如POSTMAN)如何实时知道响应


邮递员或REST客户端与服务器有TCP连接(使用TCP连接上的HTTP协议)。他们创建TCP连接,然后在该套接字上发送HTTP请求,该套接字在等待响应时保持打开状态。当服务器完成其业务时,它会通过打开的TCP套接字发回响应。编写客户端代码的方式有很多种(邮递员和浏览器可能会以不同的方式编写客户端代码),但当数据到达TCP套接字时,客户端将以某种方式被通知有数据要读取,客户端将读取该数据,处理响应,然后由于这是HTTP请求/响应协议,TCP连接可能会关闭。

“那么服务器端是否会挂起线程”-为什么会有?正如您所说,它使用承诺。“浏览器将等待启用node.js的REST服务启动