mirror of
https://github.com/zebrajr/express.git
synced 2025-12-06 12:19:51 +01:00
feat: Extend res.links() to allow adding multiple links with the same rel (closes #2729) (#4885)
Some checks failed
ci / Lint (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (18, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (18, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (19, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (19, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (20, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (20, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (21, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (21, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (22, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (22, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (23, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (23, windows-latest) (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
legacy / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (16, ubuntu-latest) (push) Has been cancelled
legacy / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (16, windows-latest) (push) Has been cancelled
legacy / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (17, ubuntu-latest) (push) Has been cancelled
legacy / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (17, windows-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
ci / coverage (push) Has been cancelled
legacy / coverage (push) Has been cancelled
Some checks failed
ci / Lint (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (18, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (18, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (19, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (19, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (20, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (20, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (21, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (21, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (22, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (22, windows-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (23, ubuntu-latest) (push) Has been cancelled
ci / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (23, windows-latest) (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
legacy / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (16, ubuntu-latest) (push) Has been cancelled
legacy / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (16, windows-latest) (push) Has been cancelled
legacy / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (17, ubuntu-latest) (push) Has been cancelled
legacy / Node.js ${{ matrix.node-version }} - ${{matrix.os}} (17, windows-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
ci / coverage (push) Has been cancelled
legacy / coverage (push) Has been cancelled
This commit is contained in:
parent
6ed3439584
commit
caa4f68ee8
|
|
@ -11,6 +11,7 @@ unreleased
|
||||||
* Remove unused `depd` dependency
|
* Remove unused `depd` dependency
|
||||||
* Add support for `Uint8Array` in `res.send`
|
* Add support for `Uint8Array` in `res.send`
|
||||||
* Add support for ETag option in res.sendFile
|
* Add support for ETag option in res.sendFile
|
||||||
|
* Extend res.links() to allow adding multiple links with the same rel
|
||||||
* deps: debug@^4.4.0
|
* deps: debug@^4.4.0
|
||||||
* deps: body-parser@^2.1.0
|
* deps: body-parser@^2.1.0
|
||||||
* deps: router@^2.1.0
|
* deps: router@^2.1.0
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,11 @@ res.status = function status(code) {
|
||||||
*
|
*
|
||||||
* res.links({
|
* res.links({
|
||||||
* next: 'http://api.example.com/users?page=2',
|
* next: 'http://api.example.com/users?page=2',
|
||||||
* last: 'http://api.example.com/users?page=5'
|
* last: 'http://api.example.com/users?page=5',
|
||||||
|
* pages: [
|
||||||
|
* 'http://api.example.com/users?page=1',
|
||||||
|
* 'http://api.example.com/users?page=2'
|
||||||
|
* ]
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
* @param {Object} links
|
* @param {Object} links
|
||||||
|
|
@ -92,7 +96,14 @@ res.links = function(links){
|
||||||
var link = this.get('Link') || '';
|
var link = this.get('Link') || '';
|
||||||
if (link) link += ', ';
|
if (link) link += ', ';
|
||||||
return this.set('Link', link + Object.keys(links).map(function(rel) {
|
return this.set('Link', link + Object.keys(links).map(function(rel) {
|
||||||
return '<' + links[rel] + '>; rel="' + rel + '"';
|
// Allow multiple links if links[rel] is an array
|
||||||
|
if (Array.isArray(links[rel])) {
|
||||||
|
return links[rel].map(function (singleLink) {
|
||||||
|
return `<${singleLink}>; rel="${rel}"`;
|
||||||
|
}).join(', ');
|
||||||
|
} else {
|
||||||
|
return `<${links[rel]}>; rel="${rel}"`;
|
||||||
|
}
|
||||||
}).join(', '));
|
}).join(', '));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,5 +43,23 @@ describe('res', function(){
|
||||||
.expect('Link', '<http://api.example.com/users?page=2>; rel="next", <http://api.example.com/users?page=5>; rel="last", <http://api.example.com/users?page=1>; rel="prev"')
|
.expect('Link', '<http://api.example.com/users?page=2>; rel="next", <http://api.example.com/users?page=5>; rel="last", <http://api.example.com/users?page=1>; rel="prev"')
|
||||||
.expect(200, done);
|
.expect(200, done);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should set multiple links for single rel', function (done) {
|
||||||
|
var app = express();
|
||||||
|
|
||||||
|
app.use(function (req, res) {
|
||||||
|
res.links({
|
||||||
|
next: 'http://api.example.com/users?page=2',
|
||||||
|
last: ['http://api.example.com/users?page=5', 'http://api.example.com/users?page=1']
|
||||||
|
});
|
||||||
|
|
||||||
|
res.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
request(app)
|
||||||
|
.get('/')
|
||||||
|
.expect('Link', '<http://api.example.com/users?page=2>; rel="next", <http://api.example.com/users?page=5>; rel="last", <http://api.example.com/users?page=1>; rel="last"')
|
||||||
|
.expect(200, done);
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user