我有以下的reifyify处理程序:

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楼 票数: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");

  ask by Jason Whittle translate from so

未解决问题?本站智能推荐:

2回复

将读取流插入写入流不起作用

我(作为客户端)正尝试使用restify发布图像,而服务器只需要保存它即可。 不管用。 创建一个空文件,仅此而已。 当我将req.body复制到缓冲区中,然后fs.writeFile(...)时,它可以工作。 我也尝试过req.body.pipe ,但这会引发错误。
1回复

Resitify的集中式错误处理

我在Restify应用中无法设置集中式错误处理。 我想捕获某些Mongo错误,例如“ E11000重复键错误”,然后将它们映射到重新调整ConflictError。 如果我只是在路由中从Mongo呼叫中冒出错误,客户端就会收到500错误。 我认为应该捕获InternalServer
1回复

在处理中动态丢弃处理程序

上下文 我正在尝试使用restify (2.6.2)构建一个动态服务器,其中服务器启动后将安装和卸载服务。 我意识到这可以被视为奇怪的东西,但它在面向DSL的项目的背景下有意义。 为实现这一目标,我实现了以下功能: install函数,在路径和方法名[1]指定的路由中安装处理程
1回复

restify.serveStatic不处理默认文档

我有一个基于node和restify插件的用javascript编写的REST应用程序。 我设置了一些REST功能: 我还希望提供一些静态文件,并且希望可以从http://server/admin/访问它们。 我有以下源代码可以实现此目的: / var / www /
1回复

从中间件中的Promise调用“ next()”会导致“下一个不应被多次调用”

最近,我将代码从Express更改为Restify。 老实说,我不确定它以前是否曾经发生过,但我想是的。 基本上,在我的中间件中,我调用一个承诺方法,当它解析后,我将调用next ,并在下一个中间件中执行其他操作。 当它被拒绝时,在某些情况next ,我也想没有错误地拨打电话。 否则
2回复

恢复 serveStatic 并在之后分离函数调用

当用户输入路由“/”时,我试图提供静态文件。 所以我的目标是提供静态文件(它可以工作),然后运行一个名为exampleFunction的函数。 我怎样才能做到这一点? 现在只有 serveStatic 被调用,之后我没有找到运行 exampleFunction 的方法。
1回复

nodejs restify error - 作为静态函数处理的回调服务请求

我正在使用restify模块启动节点js web服务器。 /getData路径的处理程序如下所示: - 当我使用不同的有效负载向/getData发送2个并发请求时,服务器抛出[Error: Can't set headers after they are sent.]错误并且不响
2回复

在事件侦听器回调中未调用Restify res.send()

我正在使用restify 2.8.4,nodejs 0.10.36和IBM MQ Light消息传递。 这是一种RPC模式,每当接收方准备好结果时,它将发出一个事件,而在以下条件下,重新调整POST路由将捕获该事件和数据,并使用res.send ()回复。 问题是,不会触发res.s