为什么没有调用我的流错误处理程序
Why is my stream error handler not being called?
我有以下 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"}
。我查看了请求 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:如何在antlr生成的Lexer中进行错误处理
- 生成pdf或其他非html文件时的错误处理
- sailsjs在创建两个模型时的错误处理
- 为什么没有调用我的流错误处理程序
- 错误处理try&catch+回调
- EventSource中的错误处理
- Angular JS中的通用Ajax错误处理-拦截器
- Sinon Mocha节点错误处理
- 如果文件不存在,fs.watch是否有错误处理程序
- Javascript初始化和错误处理
- AngularJS错误处理:根据错误数组显示错误
- JQuery 图像错误处理
- BreezeJS中央错误处理程序和自动重试
- 文件下载html与错误处理FileNotFound
- 使用mongoose保存多个文档时的错误处理
- Node.js如何知道回调的第一个参数是否是错误处理程序
- Meteor JavaScript-错误处理
- AJAX自定义错误处理代码问题
- 正在获取丢失的错误处理程序套接字消息,无法读取属性'timerID'使用Node.js和Socket.i
- 为什么不't JavaScript库使用错误处理