Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Node.js 在处理第一个API时,Express不服务于第二个API_Node.js_Express - Fatal编程技术网

Node.js 在处理第一个API时,Express不服务于第二个API

Node.js 在处理第一个API时,Express不服务于第二个API,node.js,express,Node.js,Express,我正在测试我的API服务器。我想知道为什么express在处理第一个API请求时不提供第二个API请求 我已经创建了测试路线。 我的第一条路线/sleep使用10秒的计时器处理请求 第二种方法是用消息响应 app.get('/sleep', function (req, res) { let newTime = (new Date()).getTime() + 10 * 1000; let x = 1; while (x) { let currTime = (new

我正在测试我的API服务器。我想知道为什么express在处理第一个API请求时不提供第二个API请求

我已经创建了测试路线。 我的第一条路线
/sleep
使用10秒的计时器处理请求

第二种方法是用消息响应

app.get('/sleep', function (req, res) {
   let newTime = (new Date()).getTime() + 10 * 1000;
   let x = 1;
   while (x) {
      let currTime = (new Date()).getTime();
      x = newTime < currTime ? 0 : 1;
   }
   return res.send("One minute complete");
});

app.get('/test', function (req, res) {
   return res.send("One minute test");
});
app.get('/sleep',函数(req,res){
让newTime=(newdate()).getTime()+10*1000;
设x=1;
while(x){
让currTime=(新日期()).getTime();
x=newTime
我已经从浏览器中点击了
/sleep
路径,并在“新建”选项卡中点击了
/test
。 第二条路线在第一条路线比赛后作出反应

那么为什么会发生这种情况呢。我做错什么了吗?

Nodejs是“单线程”的。你不应该阻塞线程

如果您想延迟响应,只需使用


原因是,节点是单线程的,您的同步代码(如下所示)为其创建了一个阻止程序

let newTime = (new Date()).getTime() + 10 * 1000;
  let x = 1;
  while (x) {
    let currTime = (new Date()).getTime();
    x = newTime < currTime ? 0 : 1;
  }
让newTime=(newdate()).getTime()+10*1000;
设x=1;
while(x){
让currTime=(新日期()).getTime();
x=newTime
解决方案:使其异步,以便将其发送到事件循环

示例:使用
setTimeout


setTimeout(function(){res.send('done');},10000)

谢谢@Yury,但我不打算等待请求。我试图测试它为什么在处理第一个请求时不提供第二个请求。@NishikantTyagi,正如我所写的nodejs是“单线程的”。您的代码阻塞了用户可用的唯一线程,这就是原因。您的方法完全不符合nodejs编程模型:异步代码和事件循环。
let newTime = (new Date()).getTime() + 10 * 1000;
  let x = 1;
  while (x) {
    let currTime = (new Date()).getTime();
    x = newTime < currTime ? 0 : 1;
  }