TypeError:dest.end不是一个函数

我正在尝试使用HTTP / 2。 我的快递版本是5.0.0-alpha.2, http2版本是3.3.4。

我想http2应该和express 5一起工作 。

const http2 = require('http2'); // const http2 = require('spdy'); // using spdy package here, everything works perfect const options = { key: fs.readFileSync(path.join(__dirname, 'private', 'server.key')), cert: fs.readFileSync(path.join(__dirname, 'private', 'server.crt')) }; const server = http2 .createServer(options, app) .listen(3000, err => { if (err) throw new Error(err); // I can see "Listening..." message, which means the server starts running well. console.log('Listening...'); }); 

服务器启动运行良好,但是当我打开客户端网站,它给了我这个错误在terminal:

 _stream_readable.js:512 dest.end(); ^ TypeError: dest.end is not a function at Stream.onend (_stream_readable.js:512:10) at Stream.g (events.js:286:16) at emitNone (events.js:91:20) at Stream.emit (events.js:185:7) at endReadableNT (_stream_readable.js:975:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickCallback (internal/process/next_tick.js:98:9) 

看来Node-http2还没有被Express支持。 请跟踪这个问题在github上支持模块http 。

同时,你可以留在节点spdy 。

 const spdy = require('spdy'); const options = { key: fs.readFileSync(path.join(__dirname, 'private', 'server.key')), cert: fs.readFileSync(path.join(__dirname, 'private', 'server.crt')) }; const server = spdy .createServer(options, app) .listen(3000, err => { if (err) throw new Error(err); console.log('Listening...'); }); 

有了Express 5.0,我们有另一个解决scheme:

 express = require( 'express' ), //Web framework // Solution express.request.__proto__ = http2.IncomingMessage.prototype; express.response.__proto__ = http2.ServerResponse.prototype; // Create app for server http/2 var apph2 = express(); 

这是服务器代码:

 var application_root = __dirname, express = require( 'express' ), //Web framework http2 = require('http2') logger = require('morgan') fs = require('fs') constants = require('constants'); // Bunyan logger var bunyan = require('bunyan'); var app = require('./apps/app_name'); var bunlog = bunyan.createLogger({name: "brqx_app"}); var credentials = { // log : bunlog , key : fs.readFileSync('/etc/letsencrypt/live/domain/privkey.pem' ), cert : fs.readFileSync('/etc/letsencrypt/live/domain/fullchain.pem' ), ca : fs.readFileSync("/etc/letsencrypt/live/domain/chain.pem" ), dhparam : fs.readFileSync("/etc/letsencrypt/archive/domain/dh1.pem" ), secureOptions: constants.SSL_OP_NO_SSLv3 | constants.SSL_OP_NO_SSLv2 }; // Configure server server = http2.createServer( credentials , app); server.listen(PORT , function () { console.log('Started Brqx http/2!'); } ) 

我希望这些简单的线条有助于人们。

有一点很重要,当我们在互联网上search信息时,是testing代码的时间:2017年 – 十月。

问候。

里卡多/ Brqx。