2015-03-30 69 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"); 

拋出

相關問題