mirror of
https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
synced 2024-07-29 21:57:12 +00:00
76 lines
1.9 KiB
JavaScript
76 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
const utils = require('../utils');
|
|
|
|
/**
|
|
* Creates a Connect/Express compatible middleware bound to a Server
|
|
* @class ServerMiddleware
|
|
* @param {Server} server Server instance
|
|
* @param {Object} [outerOptions] Specific options for the middleware
|
|
* @return {Function}
|
|
*/
|
|
const Middleware = function(server, outerOptions) {
|
|
return function(req, res, next) {
|
|
const options = utils.merge(server.options, outerOptions || {});
|
|
|
|
// default options.end to true
|
|
if(typeof(options.end) !== 'boolean') {
|
|
options.end = true;
|
|
}
|
|
|
|
// 405 method not allowed if not POST
|
|
if(!utils.isMethod(req, 'POST')) {
|
|
return error(405, { 'Allow': 'POST' });
|
|
}
|
|
|
|
// 415 unsupported media type if Content-Type is not correct
|
|
if(!utils.isContentType(req, 'application/json')) {
|
|
return error(415);
|
|
}
|
|
|
|
// body does not appear to be parsed, 500 server error
|
|
if(!req.body || typeof(req.body) !== 'object') {
|
|
return next(new Error('Request body must be parsed'));
|
|
}
|
|
|
|
server.call(req.body, function(error, success) {
|
|
const response = error || success;
|
|
|
|
utils.JSON.stringify(response, options, function(err, body) {
|
|
if(err) {
|
|
return next(err);
|
|
}
|
|
|
|
// empty response?
|
|
if(body) {
|
|
const headers = {
|
|
'content-length': Buffer.byteLength(body, options.encoding),
|
|
'content-type': 'application/json; charset=utf-8'
|
|
};
|
|
|
|
res.writeHead(200, headers);
|
|
res.write(body);
|
|
} else {
|
|
res.writeHead(204);
|
|
}
|
|
|
|
// if end is false, next request instead of ending it
|
|
if(options.end) {
|
|
res.end();
|
|
} else {
|
|
next();
|
|
}
|
|
|
|
});
|
|
});
|
|
|
|
// ends the request with an error code
|
|
function error(code, headers) {
|
|
res.writeHead(code, headers || {});
|
|
res.end();
|
|
}
|
|
};
|
|
};
|
|
|
|
module.exports = Middleware;
|