首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJs无法捕获错误

NodeJs无法捕获错误
EN

Stack Overflow用户
提问于 2015-11-02 20:39:05
回答 2查看 1.6K关注 0票数 1

我使用模块omdb,在使用它时发现错误有一些困难。错误是由下面两种方法中的一种引起的,但是堆栈跟踪没有显示哪种方法。此外,console.log也没有触发任何一个,所以我假设我在试图处理可能的错误时犯了一些错误。omdb.poster的描述是:

返回海报JPEG的可读流。

代码语言:javascript
复制
function downloadImage(show, callback) {
    var filename = show.title + + " " + show.year + ".jpg";
    var path = "./images/" + filename;
    omdb.poster(show)
        .pipe(fs.createWriteStream(path))
        .on('error', function(err) {
            console.log("Download Omdb image err: " + err + " for " + show.title + " " + show.year);
            callback(err, null);
        })
        .on('close', function() {
            callback(null, path);
        });

}

function getOmdbInfo(show, callback) {
    omdb.get(show, true, function(err, movie) {
        if(err) {
            console.log("err:" + show.title + " " + show.year);
            callback(err, null);
        }
        if(!movie) {
            console.log("No OMDB info results for: " + show.title + " " + show.year);
            callback('Movie not found!', null);
        } else {
            callback(null, movie);
        }
    });
}

错误:

代码语言:javascript
复制
\node_modules\needle\lib\needle.js:81
      throw new TypeError('URL must be a string, not ' + uri);
            ^
TypeError: URL must be a string, not null
    at Object.Needle.request (\node
_modules\omdb\node_modules\needle\lib\needle.js:81:13)
    at Object.exports.(anonymous function) [as get] (\node_modules\omdb\node_modules\needle\lib\needle.js:425:19)
    at \node_modules\omdb\index.js:251:26
    at \node_modules\omdb\index.js:198:13
    at done (\node_modules\omdb\node_modules\needle\lib\needle.js:234:9)
    at PassThrough.<anonymous> (\node_modules\needle\lib\needle.js:363:11)
    at PassThrough.emit (events.js:129:20)
    at _stream_readable.js:908:16
    at process._tickCallback (node.js:355:11)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-02 21:26:23

问题的出现是因为我在尝试输送文件之后才会接到订单。通过改变这一点:

代码语言:javascript
复制
omdb.poster(show)
        .pipe(fs.createWriteStream(path))
        .on('error', function(err) {
            console.log("Download Omdb image err: " + err + " for " + show.title + " " + show.year);
            callback(err, null);
        })
        .on('close', function() {
            callback(null, path);
        });

对此:

代码语言:javascript
复制
omdb.poster(show)
        .on('error', function(err) {
            console.log("Download OMDB image err: " + err + " for " + show.title + " " + show.year);
            callback(err, null);
        })
        .pipe(fs.createWriteStream(path))
        .on('close', function() {
            callback(null, path);
        });

错误被捕获。

票数 2
EN

Stack Overflow用户

发布于 2015-11-02 21:16:27

查看omdb库的这一部分

代码语言:javascript
复制
module.exports.poster = function (show) {
    var out = new stream.PassThrough(),
        req;

    module.exports.get(show, false, function (err, res) {
        if (err) {
            out.emit('error', err);
        } else if (!res) {
            out.emit('error', new Error('Movie not found'));
        } else {
            req = needle.get(res.poster);

            req.on('error', function (err) {
                out.emit('error', err);
            });

            req.pipe(out);
        }
    });

一个正确的猜测是,内部module.exports.get方法将一个无效的url传递给内部.get()方法(我假设res.poster不存在)。要完全确定--请只测试给定电影的getOmdbInfo --我的测试没有返回“Fargo”示例的电影对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33486445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档