synt_backend
Version:
Synt light-weight node backend service
125 lines (108 loc) • 4.05 kB
JavaScript
import { overrideConsole } from "./helpers/debug";
//overrideConsole();
const express = require("express");
const app = express();
const jsonWebToken = require("./helpers/jwt");
import { i18next } from "./helpers/i18n";
const cors = require("cors");
const middleware = require("i18next-http-middleware");
// env
import "dotenv/config";
import { initializeReminderJobs } from "./database/reminders";
const port = process.env.PORT;
// cross domain requests allow
/*
{
origin: "https://synt.be",
methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allowedHeaders: ["Content-Type", "Authorization"],
credentials: true,
}
*/
app.use(cors());
// required to handle post requests
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(middleware.handle(i18next));
// Add headers
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader("Access-Control-Allow-Origin", "*");
// Request methods you wish to allow
res.setHeader(
"Access-Control-Allow-Methods",
"GET, POST, OPTIONS, PUT, PATCH, DELETE"
);
// Request headers you wish to allow
res.setHeader(
"Access-Control-Allow-Headers",
"X-Requested-With,content-type"
);
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader("Access-Control-Allow-Credentials", true);
// Pass to next layer of middleware
next();
});
// use JWT auth to secure the api
app.use(jsonWebToken());
// eslint-disable-next-line no-unused-vars
app.use(function (err, req, res, next) {
if (err.name === "UnauthorizedError") {
return res.status(403).send({
success: false,
message: "No token provided.",
});
}
});
// Add versioning /api/v1/... when api becomes public (to customers/clients)
// routes
app.use("/health", require("./controllers/health"));
app.use("/api/public", require("./controllers/public"));
app.use("/api/users", require("./controllers/users"));
app.use("/api/vmes", require("./controllers/vmes"));
app.use("/api/definitions", require("./controllers/definitions"));
app.use("/api/companies", require("./controllers/companies"));
app.use("/api/lots", require("./controllers/lots"));
app.use("/api/suppliers", require("./controllers/suppliers"));
app.use("/api/meetings", require("./controllers/meetings"));
app.use("/api/requests", require("./controllers/requests"));
app.use("/api/request/change", require("./controllers/changeRequests"));
app.use("/api/incidents", require("./controllers/incidents"));
app.use("/api/uploads", require("./controllers/uploads"));
app.use("/api/documents", require("./controllers/documents"));
app.use("/api/meetingitems", require("./controllers/meetingitems"));
app.use("/api/accounting", require("./controllers/accounting"));
app.use("/api/websocket", require("./controllers/websocket"));
app.use("/api/distributionkeys", require("./controllers/distributionkeys"));
app.use("/api/sales", require("./controllers/sales"));
app.use("/api/notifications", require("./controllers/notifications"));
app.use("/api/banking", require("./controllers/banking"));
app.use("/api/webhooks", require("./controllers/webhooks"));
app.use("/api/test", require("./controllers/test"));
app.use("/api/reminders", require("./controllers/reminders"));
app.use("/api/defaultReminders", require("./controllers/defaultReminders"));
/*
// https
const https = require("https");
const fs = require("fs");
const options = {
key: fs.readFileSync("localhost-key.pem", "utf-8"),
cert: fs.readFileSync("localhost.pem", "utf-8"),
};
var server = https.createServer(options, app);
*/
// http
const http = require("http");
var server = http.createServer(app);
console.log("Starting to connect");
server.listen(port, () => {
console.log(`Synt app running on http://localhost:${port}`);
initializeReminderJobs();
});
const io = require("socket.io")(server);
io.on("connection", (socketServer) => {
socketServer.on("npmStop", () => {
process.exit(0);
});
});