Nodejs - SPDY 推送请求错误

Posted

技术标签:

【中文标题】Nodejs - SPDY 推送请求错误【英文标题】:Nodejs - SPDY push on request error 【发布时间】:2014-03-16 12:37:54 【问题描述】:

我无法启动我的 Node 应用程序。我收到“TypeError:无法调用未定义的方法‘push’”错误。 这是我的代码:

spdy.createServer(credentials, app).listen(app.get('port'), function(req, res) 
 res.push('public/js/bootstrap.min.js', 'content-type': 'application/javascript', function(err, stream) 
        stream.end('alert("hello from push stream!")');
      );
 res.push('public/js/jquery.min.js', 'content-type': 'application/javascript', function(err, stream) 
        stream.end();
      );
 res.push('public/css/bootstrap.min.css', 'content-type': 'text/css', function(err, stream) 
        stream.end();
      );

      // write main response body and terminate stream
      res.end('Hello World!');

console.log('Express HTTPS SPDY server listening on port ' + app.get('port'));
   );

我正在运行 SDPY 版本 1.19.2 和 NodeJS 版本 0.10.25。

【问题讨论】:

【参考方案1】:

根据您的comment,您使用的是 HTTP/1.1。您需要使用 HTTP2/SPDY 服务才能进行推送。

【讨论】:

【参考方案2】:

试试这个:

// set the root path of Express server
app.use(express.static(__dirname+'/public');

app.use(function(req, res) 
  // your res.push code is here.
  var stream = res.push('/js/bootstrap.min.js', 'content-type': 'application/javascript');
  stream.on('acknowledge', function() 
    console.log('stream ACK');
  );
  stream.on('error', function() 
    console.log('stream ERR');
  );
  stream.end('alert("stream SUCCESSFUL");');
  res.end('<script src="/js/bootstrap.min.js"></script>');
);

spdy.createServer(credentials, app).listen(app.get('port'));

传递给listen() 函数的回调函数不带任何参数。见第 49 行,文件 stream-test.js

【讨论】:

错误已停止出现。但是当我查看 Firefox 27 的网络检查器时,我仍然看到在 html 文件之后获取的文件。我正在尝试让它们同时下载。 服务器返回的响应是什么? 内容长度:852 内容类型:文本/html; charset=utf-8 etag:"-1294749726" 状态:200 OK 版本:HTTP/1.1 x-powered-by:Express 我已经更新了代码。它现在应该可以工作了。此代码已使用 Firefox 27 和 Chrome 32 进行测试。 我刚刚用 Firefox 27 和 Chrome 32 进行了测试,但没有成功。没有日志显示,也没有警报消息。

以上是关于Nodejs - SPDY 推送请求错误的主要内容,如果未能解决你的问题,请参考以下文章

PUT 请求仅在 Chrome 或 Opera 中生成 SPDY 协议错误?

HTTP2 / SPDY 推流验证:如何测试?

Uploader Chrome (DropZone) 出现 ERR_SPDY_PING_FAILED 错误

Azure Apple 推送通知错误:400 错误请求

使用 Facebook JavaScript SDK 时 SPDY 出现 Chromium 错误

调用API请求时Nodejs中的ECONNRESET错误