Node.js脚本停止,没有任何错误

时间:2014-08-22 07:40:31

标签: javascript node.js

我使用scraper模块和queue模块的async函数编写了一个刮刀。

我从json文件中读取要废弃的URL列表,并将信息写入另一个JSON文件中。

这是我的剧本:

var fs = require("fs");

var scrap = require("scrap"),
    async = require("async");

var errors = [];

// Queue a list of URLs
var queue = JSON.parse(fs.readFileSync("products.json", "utf8"));
var len = queue.products.length;

var q = async.queue(function (url, done) {

    scrap(url, function(err, $) {
        var product = {};
        product.name = $("#page-body h2").first().text().trim();
        product.myarr = [];
        product.picture = $(".content img").first().attr("src");

        try {
            if (product.picture.indexOf("someword") > 1) {
                delete product.picture;
            }
        }
        catch (e) {
            console.error(e);
        }

        $(".content [style^=\"color: #\"] [style=\"font-weight: bold\"], .content [style=\"font-weight: bold\"] [style^=\"color: #\"]").each(function() {
            product.myarr.push($(this).text().trim().toLowerCase());
        });

        if (product.myarr.length) {
            fs.appendFile("products-parsed.json", JSON.stringify(product) + ",\n", function (err) {
                console.log(queue.products.indexOf(url), len, err);
                if (err) { errors.push(queue.products.indexOf(url)); }
                done();
            });
        }
    });

}, 20);

q.drain = function() {
    console.log(errors);
};

q.push(queue.products);

当我运行它时,在大约3.000页之后,它停止(退出)并且它不会给出任何错误,我必须从最新的工作页面开始使用:

q.push(queue.products.slice(lastWorkedPage, queue.products.length - 1));

如何解决此问题?

2 个答案:

答案 0 :(得分:0)

不确定为什么,顺便说一句,问题是由这一行造成的:

console.log(queue.products.indexOf(url), len, err);

评论它已经解决了问题,请随意提供更准确的答案,解释解决方案,我会将其设置为已接受。

答案 1 :(得分:0)

尚无评论,所以我必须发布新答案。

我可以确认console.log - 错误。尝试使用console.log()时,NodeJS / Express有时会停止!

一个测试项目的代码:

        console.log(req.body.credentials.password, isMatch);
        if (isMatch) {
            sess.currentUser = user;
            console.log(user);
            res.send({ status: "ok", loginUser: user });
        }
        else {
            res.send({ status : "error", msg: "Login failed!" });
        }

第二个日志记录行(console.log(user))无错误地停止NodeJS!这种情况只发生在某些环境中 - 在大多数开发环境中,这都可以正常工作!