gpt4 book ai didi

node.js - 仅发送 1 个时在服务器上接收 2 个 HTTP 请求

转载 作者:可可西里 更新时间:2023-11-01 17:32:10 24 4
gpt4 key购买 nike

我正在创建一个应用程序并使用 http://c9.io开发它的环境。它是一个 NodeJS 应用程序,它提供了一些 REST 端点供客户端应用程序查询。到目前为止,一切都运行良好,今天我观察到,对于浏览器向 REST API 发送的 1 次调用,有 2 次请求显示为已接收,请求处理程序被调用 2 次。这减慢了一个请求的响应时间。

在 Chrome 开发者工具中,它只显示一个已发送的请求,但是,我使用 app.use() 在 Express 中记录传入的请求,并且它为每个请求打印相同的 2 次。此外,处理程序被调用两次。

这是间歇性发生的,不是每次都发生。 我负责企业网络。由于我当天发送了很多请求进行测试,是否有可能是监控程序发送请求,因为它发现它可疑?我没有编辑处理请求的代码。

编辑:按照建议为处理程序添加代码。

app.get('/suggestions/:keyword', function(r, s) {
sug_db.retrieveSuggestions(r.params.keyword, function(data) {
s.writeHead(200, {'content-type': 'text/html'});
s.write(renderSugg({data: data}))
s.end();
});
});

app.get('/search/:query', function(r, s) {
esc_db.search(r.params.query, function(data) {
s.send(renderResults({query: r.params.query, results:data}));
});
});

如您所见,它们只是从数据库中获取一些数据并将结果作为 HTTP 响应返回。我使用的模板引擎是 Pug(以前称为 Jade)

最佳答案

看起来您包含在问题中的代码不会因为运行两次而受到处罚。但也许 sug_db.retrieveSuggestionsesc_db.search 中的某些代码可以做到这一点。

我会做的是:

在调用函数之前和回调内部,在您提供的代码中添加一些日志记录:

app.get('/suggestions/:keyword', function(r, s) {
console.log('*** GET /suggestions/:keyword handler');
sug_db.retrieveSuggestions(r.params.keyword, function(data) {
console.log('GET /suggestions/:keyword callback');
s.writeHead(200, {'content-type': 'text/html'});
s.write(renderSugg({data: data}))
s.end();
});
});

app.get('/search/:query', function(r, s) {
console.log('*** GET /search/:query handler');
esc_db.search(r.params.query, function(data) {
console.log('GET /search/:query callback');
s.send(renderResults({query: r.params.query, results:data}));
});
});

(或将 console.log 更改为您使用的任何日志记录方法)。我会看到实际上调用了两次的内容——处理程序本身,或者回调,或者没有。接下来将检查处理程序实际调用的函数:

  • sug_db.retrieveSuggestions()
  • esc_db.search()
  • renderSugg()
  • renderResults()

重要的是要了解什么实际上被调用了两次,然后检查它为什么会发生。但是,如果您执行以下操作,则可能会发生这种情况:

function badFunction(data, callback) {
if (something) {
callback('error');
}
callback('ok');
}

代替:

function goodFunction(data, callback) {
if (something) {
callback('error');
} else {
callback('ok');
}
}

我希望从处理程序调用的函数可以执行类似的操作来调用回调两次 - 也许他们检查的条件或错误以前没有发生但现在发生了,从而导致行为发生变化。

关于node.js - 仅发送 1 个时在服务器上接收 2 个 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39594007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com