UNPKG

1.11 kBJavaScriptView Raw
1var middleware = require('./middleware')
2var logResponse = require('./log').logResponse
3var resolveUrl = require('../resolveUrl')
4
5function consumeStream (s) {
6 return new Promise(function (resolve, reject) {
7 s.on('end', function () {
8 resolve()
9 })
10
11 s.on('error', function (e) {
12 reject(e)
13 })
14
15 s.resume()
16 })
17}
18
19module.exports = middleware('redirect', function (request, next, client) {
20 return next().then(function (response) {
21 var statusCode = response.statusCode
22 var location = response.headers.location
23
24 if (request.options.redirect !== false && location && (statusCode === 300 || statusCode === 301 || statusCode === 302 || statusCode === 303 || statusCode === 307)) {
25 return consumeStream(response.body).then(function () {
26 logResponse(response)
27 return client.get(resolveUrl(request.url, location), request.options).then(function (redirectResponse) {
28 var error = new Error('redirect')
29 error.redirectResponse = redirectResponse
30 throw error
31 })
32 })
33 } else {
34 return response
35 }
36 })
37})