我的一个控制器正在抓取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();
}
这会触发另一个获取每个链接状态的控制器;下面是该控制器的代码:
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'控制器操作没有正确处理以同时处理来自1000个链接的状态代码响应,并且根据我的理解,我需要使用异步模块和Promises来解决这个问题但是我难以抓住回调和Promises的概念,所以在这个
上获得输入会很棒答案 0 :(得分:1)
您的问题是您无法保证响应,并且在请求在节点内部失败的情况下,您可以在继续前进之前检查它。
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);
});
}
});
}