server.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. require("dotenv").config();
  2. let express = require("express");
  3. let app = express();
  4. const environment = require("./config/environment");
  5. let cors = require("cors");
  6. let path = require("path");
  7. let bodyParser = require("body-parser");
  8. let expressJwt = require("express-jwt");
  9. // Import Mongoose
  10. let mongoose = require("mongoose");
  11. app.use(cors());
  12. app.use(bodyParser.urlencoded({ extended: true }));
  13. app.use(bodyParser.json());
  14. // Connect to Mongoose and set connection variable
  15. // MongoDB connection
  16. console.log("connection string", environment.mongodb.uri);
  17. console.log("secret", environment.secret);
  18. mongoose.connect(environment.mongodb.uri, {
  19. useUnifiedTopology: true,
  20. useNewUrlParser: true
  21. });
  22. mongoose.Promise = global.Promise;
  23. // On connection error
  24. mongoose.connection.on("error", (error) => {
  25. console.log("Database error: ", error);
  26. });
  27. // On successful connection
  28. mongoose.connection.on("connected", () => {
  29. console.log("Connected to database");
  30. });
  31. // addtional configuration when serving Angular SPA (static reource and Anugalr routing)
  32. const allowedExt = [
  33. ".js",
  34. ".ico",
  35. ".css",
  36. ".png",
  37. ".jpg",
  38. ".woff2",
  39. ".woff",
  40. ".ttf",
  41. ".svg",
  42. ".webmanifest"
  43. ];
  44. // app.get("*", (req, res) => {
  45. // if (allowedExt.filter((ext) => req.url.indexOf(ext) > 0).length > 0) {
  46. // res.sendFile(path.resolve(`public/${req.url}`));
  47. // } else {
  48. // res.sendFile(path.resolve("public/index.html"));
  49. // }
  50. //
  51. // });
  52. // Import routes
  53. let apiRoutes = require("./api-routes");
  54. // use JWT auth to secure the api, the token can be passed in the authorization header or querystring
  55. app.use(
  56. expressJwt({
  57. secret: environment.secret,
  58. algorithms: ["HS256"],
  59. getToken: function (req) {
  60. if (
  61. req.headers.authorization &&
  62. req.headers.authorization.split(" ")[0] === "Bearer"
  63. ) {
  64. return req.headers.authorization.split(" ")[1];
  65. } else if (req.query && req.query.token) {
  66. return req.query.token;
  67. }
  68. return null;
  69. }
  70. }).unless({ path: ["/api/user/authenticate", "/api/users", "/index.html"] })
  71. );
  72. // Use Api routes in the App
  73. app.use("/api", apiRoutes);
  74. const HOST = "0.0.0.0";
  75. // start server
  76. // Launch app to listen to specified port
  77. const server = app.listen(process.env.EXPRESS_PORT || 3000, HOST, () => {
  78. const PORT = server.address().port;
  79. console.log(`Running on http://${HOST}:${PORT}`);
  80. });