GeezerVison is showing github.com — http: enable call chaining with setHeader() · nodejs/node@ad39b37
File tree
Expand file treeCollapse file tree
Open diff view settings
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: doc/api/http.md +5-1Lines changed: 5 additions & 1 deletion - Display the source diff
- Display the rich diff
| Original file line number | Diff line number | Diff line change |
|---|
@@ -1587,13 +1587,17 @@ added: v0.4.0 |
1587 | 1587 |
|
1588 | 1588 | * `name` {string} |
1589 | 1589 | * `value` {any} |
| 1590 | +* Returns: {http.ServerResponse} |
| 1591 | + |
| 1592 | +Returns the response object. |
1590 | 1593 |
|
1591 | 1594 | Sets a single header value for implicit headers. If this header already exists |
1592 | 1595 | in the to-be-sent headers, its value will be replaced. Use an array of strings |
1593 | 1596 | here to send multiple headers with the same name. Non-string values will be |
1594 | 1597 | stored without modification. Therefore, [`response.getHeader()`][] may return |
1595 | 1598 | non-string values. However, the non-string values will be converted to strings |
1596 | | -for network transmission. |
| 1599 | +for network transmission. The same response object is returned to the caller, |
| 1600 | +to enable call chaining. |
1597 | 1601 |
|
1598 | 1602 | ```js |
1599 | 1603 | response.setHeader('Content-Type', 'text/html'); |
|
Collapse file
Copy file name to clipboardExpand all lines: lib/_http_outgoing.js +1Lines changed: 1 addition & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -565,6 +565,7 @@ OutgoingMessage.prototype.setHeader = function setHeader(name, value) { |
565 | 565 | this[kOutHeaders] = headers = ObjectCreate(null); |
566 | 566 |
|
567 | 567 | headers[name.toLowerCase()] = [name, value]; |
| 568 | + return this; |
568 | 569 | }; |
569 | 570 |
|
570 | 571 |
|
|
Collapse file
Copy file name to clipboard +29Lines changed: 29 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
|
| 1 | +'use strict'; |
| 2 | +const common = require('../common'); |
| 3 | +const http = require('http'); |
| 4 | +const assert = require('assert'); |
| 5 | +const expected = { |
| 6 | + '__proto__': null, |
| 7 | + 'testheader1': 'foo', |
| 8 | + 'testheader2': 'bar', |
| 9 | + 'testheader3': 'xyz' |
| 10 | +}; |
| 11 | +const server = http.createServer(common.mustCall((req, res) => { |
| 12 | + let retval = res.setHeader('testheader1', 'foo'); |
| 13 | + |
| 14 | + // Test that the setHeader returns the same response object. |
| 15 | + assert.strictEqual(retval, res); |
| 16 | + |
| 17 | + retval = res.setHeader('testheader2', 'bar').setHeader('testheader3', 'xyz'); |
| 18 | + // Test that chaining works for setHeader. |
| 19 | + assert.deepStrictEqual(res.getHeaders(), expected); |
| 20 | + res.end('ok'); |
| 21 | +})); |
| 22 | +server.listen(0, () => { |
| 23 | + http.get({ port: server.address().port }, common.mustCall((res) => { |
| 24 | + res.on('data', () => {}); |
| 25 | + res.on('end', common.mustCall(() => { |
| 26 | + server.close(); |
| 27 | + })); |
| 28 | + })); |
| 29 | +}); |