index.js 1.89 KB
const Koa = require("koa");
const Router = require("koa-router");
const bodyParser = require("koa-bodyparser");

const mongoose = require("mongoose");
const fs = require("fs");
const path = require('path');
const HTTPS = require('https');

const morgan = require("koa-morgan");
const jwtMiddleware = require("./src/lib/jwtMiddleware");

const api = require("./src/api");

const cors = require('@koa/cors'); // for fix CORS Error

require("dotenv").config();

const app = new Koa();
const router = new Router();
const accessLogStream = fs.createWriteStream(__dirname + "/access.log", {
  flags: "a",
});
require("dotenv").config();
app.use(cors());
app.use(bodyParser());
app.use(jwtMiddleware);
app.use(morgan("combined", { stream: accessLogStream }));

const { SERVER_PORT, MONGO_URL, SSLPORT, DOMAIN } = process.env;

router.use("/api", api.routes());
app.use(router.routes()).use(router.allowedMethods());

mongoose
  .connect(MONGO_URL, {
    useNewUrlParser: true,
    useFindAndModify: false,
    useUnifiedTopology: true,
    useCreateIndex : true
  })
  .then(() => {
    console.log("Connected to MongoDB");
  })
  .catch((e) => {
    console.log(e);
  });

app.listen(SERVER_PORT, () => {
  console.log("Server is running on port", process.env.SERVER_PORT);
});

//for Line Channel
try {
  const option = {
    ca: fs.readFileSync('/etc/letsencrypt/live/' + DOMAIN +'/fullchain.pem'),
    key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + DOMAIN +'/privkey.pem'), 'utf8').toString(),
    cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + DOMAIN +'/cert.pem'), 'utf8').toString(),
  };

  HTTPS.createServer(option, app.callback()).listen(SSLPORT, () => {
    console.log(`[HTTPS] Server is started on port ${SSLPORT}`);
  });
} catch (error) {
  console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
  console.log(error);
}