mirror of
https://github.com/nodejs/node.git
synced 2025-05-09 09:08:46 +00:00

Rather than using the `'fetchTrailers'` event to collect trailers, a new `getTrailers` callback option is supported. If not set, the internals will skip calling out for trailers at all. Expands the test to make sure trailers work from the client side also. PR-URL: https://github.com/nodejs/node/pull/14239 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
// Flags: --expose-http2
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const h2 = require('http2');
|
|
const body =
|
|
'<html><head></head><body><h1>this is some data</h2></body></html>';
|
|
const trailerKey = 'test-trailer';
|
|
const trailerValue = 'testing';
|
|
|
|
const server = h2.createServer();
|
|
|
|
// we use the lower-level API here
|
|
server.on('stream', common.mustCall(onStream));
|
|
|
|
function onStream(stream, headers, flags) {
|
|
stream.on('trailers', common.mustCall((headers) => {
|
|
assert.strictEqual(headers[trailerKey], trailerValue);
|
|
}));
|
|
stream.respond({
|
|
'content-type': 'text/html',
|
|
':status': 200
|
|
}, {
|
|
getTrailers: common.mustCall((trailers) => {
|
|
trailers[trailerKey] = trailerValue;
|
|
})
|
|
});
|
|
stream.end(body);
|
|
}
|
|
|
|
server.listen(0);
|
|
|
|
server.on('listening', common.mustCall(function() {
|
|
const client = h2.connect(`http://localhost:${this.address().port}`);
|
|
const req = client.request({ ':path': '/', ':method': 'POST' }, {
|
|
getTrailers: common.mustCall((trailers) => {
|
|
trailers[trailerKey] = trailerValue;
|
|
})
|
|
});
|
|
req.on('data', common.mustCall());
|
|
req.on('trailers', common.mustCall((headers) => {
|
|
assert.strictEqual(headers[trailerKey], trailerValue);
|
|
}));
|
|
req.on('end', common.mustCall(() => {
|
|
server.close();
|
|
client.destroy();
|
|
}));
|
|
req.end('data');
|
|
|
|
}));
|