gpt4 book ai didi

javascript - 为什么我的流错误处理程序没有被调用?

转载 作者:行者123 更新时间:2023-12-03 10:27:26 24 4
gpt4 key购买 nike

我有以下 Restify 处理程序:

var assert = require('assert-plus');
var request = require('request');

function postParseVideo(req, res, next) {
assert.string(req.body.videoSourceUrl, 'videoSourceUrl');

var stream = request.get({uri: req.body.videoSorceUrl});
stream.on('response', function(parseResponse) {
fnThatTakesAReadableStream(parseResponse, function(err, data) {
if (err) {
console.log(err);
next(err);
} else {
res.send(201, null, {Location: data.location});
next();
}
});
});
stream.on('error', function(err) {
console.log(err);
next(err);
});
};

当我运行它时,两个流事件处理程序都没有被调用。相反,错误会冒泡到 Restify 服务器:{"code":"InternalError","message":"options.uri is a required argument"}。我查看了 request v2.54.0 的源代码,看起来该错误消息一定来自restify.js 的第 406 行,内容如下:

return self.emit('error', new Error('options.uri is a required argument'))

我已经在许多其他语言中成功使用了流,但我对在 JavaScript 中使用它们还很陌生。在我看来, request.get 正在抛出同步错误,而它应该发出“错误”事件。我对 Node 中流的实现方式有什么根本性的误解吗?

最佳答案

您的 req.body.videoSourceUrl 可能已定义且类型为 string,但它可能为空。我可以通过执行以下操作来重现您的错误:

request.get("")
.on('response', function(){
})
.on('error', function(){
})

我还会考虑转储 assert-plus,如下所示:

var ass = require('assert-plus');
ass.string(new String("yes"), "no");

抛出

关于javascript - 为什么我的流错误处理程序没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com