Files
ostandari/server/index.js
T
2024-10-21 10:22:26 +03:30

105 lines
2.5 KiB
JavaScript

const express = require('express');
const database = require('./database');
const fileUpload = require('express-fileupload');
const { isUser, isAdmin, isLoggedIn, hasPermission } = require('./authentication');
const bodyParser = require('body-parser');
const cronJobs = require('./plugins/cronJobs');
const swaggerJsdoc = require("swagger-jsdoc");
const cors = require('cors')
const swaggerUi = require("swagger-ui-express");
const { createAdmins } = require('./plugins/privateAdmin');
const portals = require('./plugins/portals');
global._ = require('lodash');
global.lodash = require('lodash-contrib');
global.portal = [];
for (const item of portals) {
portal.push(item.value);
}
// Create express instance
const app = express();
const options = {
definition: {
openapi: "3.0.0",
info: {
title: "Ostandari Swagger RestFul API",
version: "1.0.0",
description: "API documentation",
license: {
name: "MIT",
},
},
components: {
securitySchemes: {
bearerAuth: {
type: 'http',
in: 'header',
name: 'Authorization',
description: 'Bearer Token',
scheme: 'bearer',
bearerFormat: 'JWT',
},
},
},
security: {
bearerAuth: [],
},
servers: [
{
url: "http://localhost:3756",
},
],
},
apis: ['./server/routes/*.js']
};
const specs = swaggerJsdoc(options);
cronJobs();
createAdmins();
const corsOptions ={
origin:'*',
credentials:true,
optionSuccessStatus:200,
}
// Init body-parser options (inbuilt with express)
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(fileUpload());
app.use(cors(corsOptions))
app.use(
"/v1",
swaggerUi.serve,
swaggerUi.setup(specs , {explorer:true})
);
// Require & Import API routes
const Public = require('./routes/public');
const admin = require('./routes/admin');
const auth = require('./routes/auth');
const user = require('./routes/user');
// Use API Routes
app.use('/public', Public);
app.use('/auth', auth);
app.use('/admin', [isLoggedIn, isAdmin], admin);
// app.use('/user', isUser, user);
// Error handling middleware to catch buffer issues
app.use((err, req, res, next) => {
if (err.code === 'ENOBUFS') {
console.error('Buffer space error:', err);
res.status(500).send('Server is experiencing buffer space issues.');
} else {
next(err);
}
});
// Export the server middleware
module.exports = {
path: '/api',
handler: app
};