« index
Coverage for /Users/yunong/workspace/node-restify/lib/plugins/full_response.js : 92%
106 lines |
98 run |
8 missing |
3 partial |
18 blocks |
15 blocks run |
3 blocks missing
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | // Copyright 2012 Mark Cavage, Inc. All rights reserved. var crypto = require('crypto'); var httpDate = require('../http_date'); ///--- Globals var ALLOW_HEADERS = [ 'Accept', 'Accept-Version', 'Content-Length', 'Content-MD5', 'Content-Type', 'Date', 'Api-Version', 'Response-Time' ].join(', '); var EXPOSE_HEADERS = [ 'Api-Version', 'Request-Id', 'Response-Time' ].join(', '); ///--- API function setHeaders(req, res) { var hash; var now = new Date(); var methods; if (!res.getHeader('Access-Control-Allow-Origin')) res.setHeader('Access-Control-Allow-Origin', '*'); if (!res.getHeader('Access-Control-Allow-Headers')) res.setHeader('Access-Control-Allow-Headers', ALLOW_HEADERS); if (!res.getHeader('Access-Control-Allow-Methods')) { if (res.methods && res.methods.length > 0) { methods = res.methods.join(', '); res.setHeader('Access-Control-Allow-Methods', methods); } } if (!res.getHeader('Access-Control-Expose-Headers')) res.setHeader('Access-Control-Expose-Headers', EXPOSE_HEADERS); if (!res.getHeader('Connection')) { res.setHeader('Connection', req.isKeepAlive() ? 'Keep-Alive' : 'close'); } if (res._data && !res.getHeader('Content-MD5'))res.getHeader('Content-MD5')) { hash = crypto.createHash('md5'); hash.update(res._data); res.setHeader('Content-MD5', hash.digest('base64')); } if (!res.getHeader('Date')) res.setHeader('Date', httpDate(now)); if (res.etag && !res.getHeader('Etag'))res.getHeader('Etag')) res.setHeader('Etag', res.etag); if (!res.getHeader('Server')) res.setHeader('Server', res.serverName); if (res.version && !res.getHeader('Api-Version')) res.setHeader('Api-Version', res.version); if (!res.getHeader('Request-Id')) res.setHeader('Request-Id', req.getId()); if (!res.getHeader('Response-Time')) res.setHeader('Response-Time', now.getTime() - req._time); } function fullResponse() { function restifyResponseHeaders(req, res, next) { res.once('header', function () { // Restify 1.0 compatibility if (res.defaultResponseFormatters) res.defaultResponseFormatters(res._data); res.emit('beforeSend', res._data, res._body); // end backwards-compatibility return (setHeaders(req, res)); }); return (next()); } return (restifyResponseHeaders); } ///--- Exports module.exports = fullResponse; |