UNPKG

canned

Version:

serve canned responses to mock an api, based on files in a folder

77 lines (66 loc) 2.08 kB
"use strict"; var fs = require('fs') function Response(content_type, content, statusCode, res, options, custom_headers) { this.cors_enabled = !!options.cors_enabled this.cors_headers = options.cors_headers this.response_delay = options.response_delay this.content_type = content_type this.content = content this.statusCode = statusCode this.res = res this.custom_headers = custom_headers || [] } Response.content_types = { 'json': 'application/json', 'html': 'text/html', 'txt': 'text/plain', 'js': 'application/javascript', 'nt': 'application/n-triples', 'csv': 'text/csv', 'jsonld': 'application/ld+json' } Response.cors_headers = [ ['Access-Control-Allow-Origin', '*'], ['Access-Control-Allow-Headers', 'X-Requested-With'], ['Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS'] ] Response.prototype.send = function () { this.headers().forEach(function (header) { this.res.setHeader(header[0], header[1]) }, this) this.res.statusCode = this.statusCode setTimeout(this.res.end.bind(this.res, this.content), this.response_delay) } Response.prototype.headers = function () { var headers = [] headers = this._addContentTypeHeaders(headers) headers = this._addCORSHeaders(headers) headers = this._addCustomHeaders(headers) return headers } Response.prototype._addContentTypeHeaders = function (headers) { if (this.content_type) { headers.push(['Content-Type', this.content_type]) } return headers } Response.prototype._addCORSHeaders = function (headers) { var that = this; if (this.cors_enabled) { Response.cors_headers.forEach(function (h) { if (!!that.cors_headers && h[0] === 'Access-Control-Allow-Headers') headers.push([h[0], h[1] + ", " + that.cors_headers]) else headers.push(h) }) } return headers } Response.prototype._addCustomHeaders = function (headers) { this.custom_headers.forEach(function(header) { var key = Object.keys(header)[0] headers.push([key, header[key]]) }) return headers } module.exports = Response