Projekt

Obecné

Profil

Stáhnout (2.04 KB) Statistiky
| Větev: | Revize:
1 3a515b92 cagy
/*!
2
 * statuses
3
 * Copyright(c) 2014 Jonathan Ong
4
 * Copyright(c) 2016 Douglas Christopher Wilson
5
 * MIT Licensed
6
 */
7
8
'use strict'
9
10
/**
11
 * Module dependencies.
12
 * @private
13
 */
14
15
var codes = require('./codes.json')
16
17
/**
18
 * Module exports.
19
 * @public
20
 */
21
22
module.exports = status
23
24
// status code to message map
25
status.STATUS_CODES = codes
26
27
// array of status codes
28
status.codes = populateStatusesMap(status, codes)
29
30
// status codes for redirects
31
status.redirect = {
32
  300: true,
33
  301: true,
34
  302: true,
35
  303: true,
36
  305: true,
37
  307: true,
38
  308: true
39
}
40
41
// status codes for empty bodies
42
status.empty = {
43
  204: true,
44
  205: true,
45
  304: true
46
}
47
48
// status codes for when you should retry the request
49
status.retry = {
50
  502: true,
51
  503: true,
52
  504: true
53
}
54
55
/**
56
 * Populate the statuses map for given codes.
57
 * @private
58
 */
59
60
function populateStatusesMap (statuses, codes) {
61
  var arr = []
62
63
  Object.keys(codes).forEach(function forEachCode (code) {
64
    var message = codes[code]
65
    var status = Number(code)
66
67
    // Populate properties
68
    statuses[status] = message
69
    statuses[message] = status
70
    statuses[message.toLowerCase()] = status
71
72
    // Add to array
73
    arr.push(status)
74
  })
75
76
  return arr
77
}
78
79
/**
80
 * Get the status code.
81
 *
82
 * Given a number, this will throw if it is not a known status
83
 * code, otherwise the code will be returned. Given a string,
84
 * the string will be parsed for a number and return the code
85
 * if valid, otherwise will lookup the code assuming this is
86
 * the status message.
87
 *
88
 * @param {string|number} code
89
 * @returns {number}
90
 * @public
91
 */
92
93
function status (code) {
94
  if (typeof code === 'number') {
95
    if (!status[code]) throw new Error('invalid status code: ' + code)
96
    return code
97
  }
98
99
  if (typeof code !== 'string') {
100
    throw new TypeError('code must be a number or string')
101
  }
102
103
  // '403'
104
  var n = parseInt(code, 10)
105
  if (!isNaN(n)) {
106
    if (!status[n]) throw new Error('invalid status code: ' + n)
107
    return n
108
  }
109
110
  n = status[code.toLowerCase()]
111
  if (!n) throw new Error('invalid status message: "' + code + '"')
112
  return n
113
}