gpt4 book ai didi

javascript - 如何将请求与异步模块一起使用

转载 作者:行者123 更新时间:2023-12-03 10:26:49 25 4
gpt4 key购买 nike

我的一个 Controller 正在抓取 100 个页面,其中从页面中提取所有链接,当链接保存到数据库后,我正在使用 afterCreate 生命周期回调(下面是代码)

afterCreate: function(createdLink, next) {
var request = require("request");
var currentLink = config.apiUrl + "update/linkstatus?linkPath=" + createdLink.linkUrl;
request(currentLink, function(error, response, body) {
console.log("saved", body);
});
next();
}

这会触发另一个 Controller ,该 Controller 获取每个链接的状态;以下是该 Controller 的代码:

linkstatus: function(req, res) {
var request = require("request");
var currentLink = req.query.linkPath;
request(currentLink, function(error, response, body) {
if(error) {
console.log(error);
}
var thisStatusCode = response.statusCode;
Link.update(
{linkUrl: currentLink}, {statusCode: thisStatusCode}
).exec(function(err, updatedLink) {
res.status(200).send(updatedLink);
});
});
}

问题是,经过一些调用后,我开始收到以下错误:

TypeError: Cannot read property 'statusCode' of undefined
at Request._callback (/home/ubuntu/myapp/api/controllers/UpdateController.js:11
2:32)
at self.callback (/home/ubuntu/myapp/node_modules/request/request.js:360:22)
at Request.emit (events.js:107:17)
at Request.onRequestError (/home/ubuntu/myapp/node_modules/request/request.js:1

假设我编写的“linkstatus” Controller 操作没有正确处理同时从 1000 个链接获取状态代码响应,根据我的理解,我需要使用异步模块和 Promises 来解决这个问题,但我我很难理解回调和 Promise 的概念,因此如果能获得有关此方面的意见就太好了

最佳答案

您的问题是,您无法保证得到响应,并且在请求在 Node 内部失败的情况下,您需要在继续之前进行检查。

linkstatus: function(req, res, next) {
var request = require("request");
var currentLink = req.query.linkPath;
request(currentLink, function(error, response, body) {
if(error || !response) {
console.log(error);
}
else {
var thisStatusCode = response.statusCode;
Link.update(
{linkUrl: currentLink}, {statusCode: thisStatusCode}
).exec(function(err, updatedLink) {
res.status(200).send(updatedLink);
});
}
});
}

关于javascript - 如何将请求与异步模块一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29367180/

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