发送多个请求在节点

时间:2015-11-09 22:31:43

标签: node.js heroku request

我正在使用Request包连接到Riot API以从他们的数据龙服务获取图像。一旦请求给我一个响应,我将图像保存到磁盘上。拯救冠军缩略图很简单;没问题。但是,项目缩略图在95%的时间内都失败了。它偶尔只能在我的本地机器上运行。

我已经将应用程序部署到Heroku,并且我部署的图像都已成功加载了4/4次。不幸的是,如前所述,当我在本地运行服务器时,我的互联网实际挂起,只有当我尝试获取项目缩略图时才会无法使用互联网。

这是一个片段:

function retrieveAndProcessImage(imageURL, callback) {
    "use strict";

    console.log(imageURL);

    request(imageURL, {encoding: 'binary'}, function (req_err, req_res) {

        // Extract the image name by looking at the very end of the path.
        var pathArray = (imageURL).split('/');
        var imageName = pathArray[pathArray.length - 1];

        if (req_err) {
            console.log("Couldn't retrieve " + imageName);
        } else {
            callback(imageName, req_res['body']);
        }
    });
};

以上代码段从API获取图像。偶尔使用时会保存正确的图像,所以我至少知道URL都是正确的。回调只是一个fs.writeFile,它在本地写入文件,所以我不必发送另一个请求。

function retrieveAndProcessJson(dataURL, callback) {
    "use strict";

    request(dataURL, function (req_err, req_res) {
        // Try to parse the JSON.
        try {
            var bodyJSON = JSON.parse(req_res['body']);
        } catch (err) {
            _errorMessage(dataURL);
            return;
        }

        // If the parsing failed or the retrieval failed, connection failed.
        if (bodyJSON['status'] !== undefined) {
            _errorMessage(dataURL);
            return;
        }

        // Otherwise output the success.
        console.log("Connected to " + dataURL);

        // Callback.
        callback(req_res['body']);
    });
};

以上获取原始json并将其结果传递给回调。

fileFuncs.retrieveAndProcessJson(dataURL, function (raw_body) {
    var bodyJSON = JSON.parse(raw_body);
    _saveData(raw_body);
    _saveImages(bodyJSON['data'])
});

并保存图片:

function _saveImages(dataJSON) {
    var filePath;
    var itemKey;
    var item;

    var imageURL;
    var imageName;

    // Check to see the destination folder exists, and create if it doesn't.
    fileFuncs.checkFolder(api_constants.itemThumbnailPath);

    // For each item in the item JSON, save the thumbnail.
    for (itemKey in dataJSON) {
        if (dataJSON.hasOwnProperty(itemKey)) {
            item = dataJSON[itemKey];

            // The image are saved as #{id}.png
            imageName = item['id'] + '.png';

            imageURL = api_constants.itemThumbnailURL + imageName;

            // Retrieve the file from the API.
            fileFuncs.retrieveAndProcessImage(imageURL, function (fileName, image) {
                filePath = api_constants.itemThumbnailPath + fileName;

                fs.writeFile(filePath, image, { encoding: 'binary' }, function (err) {
                    if (err) {
                        console.log("\t" + fileName + " already exists.");
                        return;
                    }

                    console.log("\tThumbnail " + fileName + " was saved.");
                })
            });
        }
    }
}

我不想每次想要查看代码中的更改内容时都必须部署到Heroku。是否有任何解决方案可以在每次请求之间留出一些时间?或者,只是让我在不挂我的网络的情况下做大量请求的事情。

0 个答案:

没有答案