Skip to content

Latest commit

 

History

History
155 lines (122 loc) · 3.33 KB

02_setup_app_js.md

File metadata and controls

155 lines (122 loc) · 3.33 KB

Setup app.js

  • Create /helpers/utils.helper.js:

    "use strict";
    utilsHelper = {};
    utilsHelper.sendResponse = (res, status, success, data, errors, message) => {
      const response = {};
      if (success) response.success = success;
      if (data) response.data = data;
      if (errors) response.errors = errors;
      if (message) response.message = message;
      res.status(status).json(response);
    };
    module.exports = utilsHelper;
  • In app.js, add:

    +const utilsHelper = require("./helpers/utils.helper");
    
    const app = express();
  • In routes/, delete users.js. In app.js,remove

    -const usersRouter = require("./routes/users");
    ...
    -app.use("/users", usersRouter);
  • Create routes/message.api.js:

    const express = require("express");
    const router = express.Router();
    
    /**
     * @route GET api/messages?page=1&limit=10
     * @description Get messages with pagination
     * @access Public
     */
    router.get("/", function (req, res, next) {
      res.send({ status: "ok", data: "Cs Mail" });
    });
    
    module.exports = router;
  • In routes/index.js, replace everything with:

    const express = require("express");
    const router = express.Router();
    
    // messageAPI
    const messageAPI = require("./message.api");
    router.use("/messages", messageAPI);
    
    module.exports = router;

    In app.js, change:

    -app.use("/", indexRouter);
    +app.use("/api", indexRouter);
  • Import cors:

    const logger = require("morgan");
    +const cors = require("cors")
    ...
    app.use(cookieParser());
    +app.use(cors());
  • Connect to DB

    • In .env, add
    MONGODB_URI='mongodb://localhost:27017/social_message'
    
    • In app.js:
    const mongoose = require('mongoose')
    const mongoURI = process.env.MONGODB_URI
    ...
    app.use(express.static(path.join(__dirname, "public")));
    
    /* DB Connections */
    mongoose
      .connect(mongoURI, {
        // some options to deal with deprecated warning
        useCreateIndex: true,
        useNewUrlParser: true,
        useFindAndModify: false,
        useUnifiedTopology: true,
      })
      .then(() => console.log(`Mongoose connected to ${mongoURI}`))
      .catch((err) => console.log(err));
  • Error Handling: In app.js, add

    /* Initialize Routes */
    app.use("/api", indexRouter);
    
    // catch 404 and forard to error handler
    app.use((req, res, next) => {
      const err = new Error("404 - Resource not found");
      next(err);
    });
    
    /* Initialize Error Handling */
    app.use((err, req, res, next) => {
      console.log("ERROR", err);
      const statusCode = err.message.split(" - ")[0];
      const message = err.message.split(" - ")[1];
      if (!isNaN(statusCode)) {
        utilsHelper.sendResponse(res, statusCode, false, null, { message }, null);
      } else {
        utilsHelper.sendResponse(
          res,
          500,
          false,
          null,
          { message: err.message },
          "Internal Server Error"
        );
      }
    });
    
    module.exports = app;

Evaluation

  • Run npm run dev in the terminal
  • Open your browser and test http://localhost:5000/api/messages:
  • And test localhost:5000\whatever:

Good job! Back to instructions