我使用模块omdb,在使用它时发现错误有一些困难。错误是由下面两种方法中的一种引起的,但是堆栈跟踪没有显示哪种方法。此外,console.log也没有触发任何一个,所以我假设我在试图处理可能的错误时犯了一些错误。omdb.poster的描述是:
返回海报JPEG的可读流。
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);
}
});
}错误:
\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)发布于 2015-11-02 21:26:23
问题的出现是因为我在尝试输送文件之后才会接到订单。通过改变这一点:
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);
});对此:
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);
});错误被捕获。
发布于 2015-11-02 21:16:27
查看omdb库的这一部分
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”示例的电影对象。
https://stackoverflow.com/questions/33486445
复制相似问题