express-typeorm-rest-boilerplate
Version:
Boilerplate code to get started with building RESTful API Services
66 lines • 2.59 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const body_parser_1 = __importDefault(require("body-parser"));
const celebrate_1 = require("celebrate");
const class_validator_1 = require("class-validator");
const cors_1 = __importDefault(require("cors"));
const helmet_1 = __importDefault(require("helmet"));
const routes_1 = __importDefault(require("../api/routes"));
const config_1 = __importDefault(require("../config"));
const ErrorHandler_1 = require("../helpers/ErrorHandler");
const logger_1 = __importDefault(require("../logger"));
exports.default = (app) => {
// Health Check endpoints
app.get('/status', (req, res) => {
res.status(200).end();
});
app.head('/status', (req, res) => {
res.status(200).end();
});
app.enable('trust proxy');
// Enable Cross Origin Resource Sharing to all origins by default
app.use(cors_1.default());
// Use Helmet to secure the app by setting various HTTP headers
app.use(helmet_1.default());
// Middleware that transforms the raw string of req.body into json
app.use(body_parser_1.default.json());
// Load API routes
app.use(`/${config_1.default.endpointPrefix}`, routes_1.default);
/// Error handlers
app.use((err, req, res, next) => {
if (celebrate_1.isCelebrateError(err)) {
logger_1.default.error('Error: %o', err);
res.status(400).json({ error: 'Invalid data' }).end();
}
else if (err instanceof Array && err[0] instanceof class_validator_1.ValidationError) {
const messageArr = [];
let e;
for (e of err) {
Object.values(e.constraints).forEach((msg) => {
messageArr.push(msg);
});
}
logger_1.default.error('Error: %o', messageArr);
res.status(400).json({ errors: messageArr }).end();
}
else if (err.name === 'UnauthorizedError') {
/**
* Handle 401 thrown by express-jwt library
*/
return res.status(401).json({ error: err.message });
}
else {
next(err);
}
});
app.use(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
(err, _req, res, _next) => {
logger_1.default.error('Error: %o', err.message);
ErrorHandler_1.handleError(err, res);
});
};
//# sourceMappingURL=express.js.map
;