Nodejs - 请求错误时的SPDY推送

3

我在启动Node应用时遇到了问题。我收到“TypeError:Cannot call method 'push' of undefined”错误。 这是我的代码:

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。

2个回答

1

根据您的评论,您正在使用HTTP/1.1服务。您需要使用HTTP2/SPDY才能使推送功能正常工作。


0

试试这个:

// 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() 函数传递的回调函数不带参数。请参见文件 stream-test.js 的第 49 行。


错误已经停止出现了。但是当我查看Firefox 27的网络检查器时,我仍然可以看到HTML文件之后获取文件。我正在尝试让它们同时下载。 - damien_calvignac
服务器返回了什么响应? - bnuhero
内容长度:852 内容类型:文本/HTML;字符集:UTF-8 ETag:“-1294749726” 状态:200 OK 版本:HTTP/1.1 X-Powered-By:Express - damien_calvignac
我已经更新了代码。现在应该可以工作了。这段代码已经在Firefox 27和Chrome 32上进行了测试。 - bnuhero
我已经检查过了。也许是我的基准测试方式有误,我使用了Firefox和Chrome的集成网络检查器,我认为当启用推送时,文件会与HTML(/)文件同时下载。但实际上我得到的只是在HTML文件解析后普通的异步下载。BNUHERO,非常感谢您的时间。 - damien_calvignac
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接