我使用模块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)
答案 0 :(得分:0)
查看omdb lib的这一部分:
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
方法将无效的网址传递给内部.get()
方法(我假设res.poster
不存在)。要完全确定 - 请仅测试给定电影的getOmdbInfo
- 我的测试没有为'Fargo'示例返回电影对象。
答案 1 :(得分:0)
问题出现了,因为我在尝试管道文件后捕获了订单。 通过改变这个:
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);
});
错误被捕获。