2015-03-30 77 views
0

我有以下的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中实现流?

回答

1

您的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"); 

抛出

相关问题