2016-08-25 2 views
4

Ich versuche, HTTP/2 zu verwenden. Meine express Version ist 5.0.0-alpha.2, http2 Version ist 3.3.4.TypeError: dest.end ist keine Funktion

Ich nehme an http2 sollte work well with 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...'); 
    }); 

Der Server startet gut läuft, aber wenn ich Client-Website zu öffnen, es gibt mir diesen Fehler im 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) 
+0

https://github.com/molnarg/node-http2/issues/100 sieht aus wie spdy ist tot – Joe

+0

@Joe danke, ich versuche, http2 Paket jetzt zu verwenden, aber gescheitert. Das ist, wo diese Frage herkam. –

+0

Ich denke, dass die Person, die die Frage beantwortet, auf die du dich beziehst, bedeutet, dass für HTTP/2, du arbeitest, das "spdy" Modul und nicht das "http2" Modul verwendend. Ich kann den Fehler replizieren, den Sie bekommen, und es geht weg, wenn ich 'spdy.createServer (...)' anstelle von 'http2.createServer (...)' benutze. – robertklep

Antwort

2

Es scheint node-http2 nicht von Express noch unterstützt. Bitte verfolgen Sie dieses Problem Support for module http auf GitHub. In der Zwischenzeit

, können Sie mit node-spdy bleiben.

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...'); 
    }); 
1

Mit Express 5.0 haben wir eine andere Lösung:

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(); 

Und dies ist der Server-Code:

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!'); 
}) 

Ich hoffe, diese einfachen Linien Menschen hilft.

Eine Sache ist wichtig, wenn wir Informationen über Internet ist das Datum des Tests suchen, wenn der Code getestet wurde: 2017 - Oktober.

Grüße.

Ricardo/Brqx.