gypsum
Version:
Simple and easy lightweight typescript server side framework on Node.js.
58 lines • 2.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const express = require("express");
const cors = require("cors");
const object_1 = require("tools-box/object");
const types_1 = require("../../types");
const logger_1 = require("../../misc/logger");
const context_1 = require("../../context");
function pushApis(expressApp, app) {
const logger = new logger_1.Logger(app.name);
const router = express.Router();
let appModels = app.publicModels;
if (appModels) {
for (let i = 0; i < appModels.length; i++) {
let model = appModels[i];
logger.info(`Implementing ${model.name} model services`);
if (model.$get('apiType') === types_1.API_TYPES.SOCKET)
continue;
let corsOptions = {};
let appCors = app.$get('cors');
object_1.extend(corsOptions, appCors);
let modelCors = model.$get('cors');
if (modelCors)
object_1.extend(corsOptions, modelCors);
let services = model.$getServices();
for (let service in services) {
if (services[service].apiType === types_1.API_TYPES.SOCKET)
continue;
let serviceCors = services[service].cors;
if (serviceCors)
object_1.extend(corsOptions, serviceCors);
logger.info(`adding service for ${app.name} app: (${services[service].method}) - ${services[service].path}`);
router.options(services[service].path, cors(corsOptions), (req, res) => res.status(204).end());
router[services[service].method](services[service].path, (req, res, next) => {
logger.info(`service request: (${req.method}) ${req.hostname}${req.path}`);
next();
}, cors(corsOptions), context_1.Context.Rest(app.name, model, services[service]));
}
}
}
expressApp.use(router);
expressApp.use((err, req, res, next) => {
logger.error(err);
console.trace(err);
if (err) {
res.status(types_1.RESPONSE_CODES.UNKNOWN_ERROR).json(new types_1.Response({
data: new types_1.ResponseError({ message: 'unkown error', original: err, code: types_1.RESPONSE_CODES.UNKNOWN_ERROR })
}));
}
else {
res.status(types_1.RESPONSE_CODES.NOT_FOUND).json(new types_1.Response({
data: new types_1.ResponseError({ message: '404 not found!', original: err, code: types_1.RESPONSE_CODES.NOT_FOUND })
}));
}
});
}
exports.pushApis = pushApis;
//# sourceMappingURL=push_apis.js.map