forked from KenzieAcademy/kwitter-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
55 lines (47 loc) · 1.55 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
require("dotenv-safe").config({ allowEmptyValues: true });
const express = require("express");
const morgan = require("morgan");
const passport = require("passport");
const swaggerUi = require("swagger-ui-express");
const { Strategy } = require("passport-jwt");
const SwaggerParser = require("swagger-parser");
const cors = require("cors");
const YAML = require("yamljs");
const swaggerSpec = YAML.load("./specification.yaml");
const controllers = require("./controllers");
const { User, sequelize } = require("./models");
const { jwtOptions, authMiddleware } = require("./controllers/auth");
const app = express();
// Settings
app.set("port", process.env.PORT || 3000);
// Middleware
app.use(cors());
app.use(morgan("tiny"));
app.use(express.json());
passport.use(
new Strategy(jwtOptions, (payload, done) => {
User.findById(payload.id).then(user => done(null, user || false));
})
);
app.use(passport.initialize());
// Routes
app.use("/docs", swaggerUi.serve, swaggerUi.setup(swaggerSpec));
app.use("/auth", controllers.auth);
app.use("/users", controllers.users);
app.use("/messages", controllers.messages);
app.use("/likes", authMiddleware, controllers.likes);
// Redirect to docs
app.get("/", (req, res) => {
res.redirect("/docs");
});
app.get("/swagger.json", (req, res) => {
res.send(swaggerSpec);
});
SwaggerParser.validate(swaggerSpec)
.then(() => sequelize.authenticate())
.then(() =>
app.listen(app.get("port"), () =>
console.log(`API server now running on port ${app.get("port")}`)
)
)
.catch(err => console.error(err.toString()));