Node.js 在处理第一个API时,Express不服务于第二个API
我正在测试我的API服务器。我想知道为什么express在处理第一个API请求时不提供第二个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
/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;
}