Skip to content

Merging 4 changes #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
21 changes: 0 additions & 21 deletions lesson_01/server.js

This file was deleted.

File renamed without changes.
File renamed without changes.
File renamed without changes.
9 changes: 9 additions & 0 deletions lesson_01_ProjectStructure/routes/root.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const express = require("express");
const router = express.Router();
const path = require("path");

router.get("^/$|/index(.html)?", (req, res) => {
res.sendFile(path.join(__dirname, "..", "views", "index.html")); // telling it where to find the /index.html file
});

module.exports = router;
22 changes: 22 additions & 0 deletions lesson_01_ProjectStructure/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
const express = require("express");
const app = express();
const path = require("path");
const PORT = process.env.PORT || 3500;

app.use("/", express.static(path.join(__dirname, "/public"))); // telling express where to find static files

app.use("/", require("./routes/root"));

app.all("*", (req, res) => {
res.status(404);
// responses based on the html request headers
if (req.accepts("html")) {
res.sendFile(path.join(__dirname, "views", "404.html"));
} else if (req.accepts("json")) {
res.json({ message: "404 Not Found" });
} else {
res.type("txt").send("404 Not Found");
}
});

app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
File renamed without changes.
File renamed without changes.
36 changes: 0 additions & 36 deletions lesson_02/server.js

This file was deleted.

File renamed without changes.
File renamed without changes.
24 changes: 24 additions & 0 deletions lesson_02_ExpressMiddleware/config/corsOptions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const allowedOrigins = require("./allowedOrigins");

const corsOptions = {
// Called to determine whether a request's origin is allowed
/*
1. origin : the origin(domain) of incoming request
2. callback : to indicate whether the origin is allowed or not
*/
origin: (origin, callback) => {
/*
1. checks if the origin is in the allowedOrigins
2. if origin is not defined (apps that do not have an origin - postman, desktop ...)
*/
if (allowedOrigins.indexOf(origin) !== -1 || !origin) {
callback(null, true);
} else {
callback(new Error("Not allowed by CORS"));
}
},
credentials: true, // enables credentials to be sent and received during cross-oirigin requests
optionsSuccessStatus: 200,
};

module.exports = corsOptions;
18 changes: 18 additions & 0 deletions lesson_02_ExpressMiddleware/middleware/errorHandler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const { logEvents } = require("./logger");

// log error events by calling the logEvents()
const errorHandler = (err, req, res, next) => {
logEvents(
`${err.name}: ${err.message}\t${req.method}\t${req.url}\t${req.headers.origin}`,
"errLog.log"
);
console.log(err.stack);

const status = res.statusCode ? res.statusCode : 500; // server error

res.status(status);

res.json({ message: err.message });
};

module.exports = errorHandler;
33 changes: 33 additions & 0 deletions lesson_02_ExpressMiddleware/middleware/logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const { format } = require("date-fns");
const { v4: uuid } = require("uuid");
const fs = require("fs");
const fsPromises = require("fs").promises;
const path = require("path");

const logEvents = async (message, logFileName) => {
const dateTime = format(new Date(), "yyyyMMdd\tHH:mm:ss");
const logItem = `${dateTime}\t${uuid()}\t${message}\n`;

try {
// If the log dir doesn't exist, create the log dir
if (!fs.existsSync(path.join(__dirname, "..", "logs"))) {
await fsPromises.mkdir(path.join(__dirname, "..", "logs"));
}
// Once the log dir is created, append the logItem into the file named "logFileName"
await fsPromises.appendFile(
path.join(__dirname, "..", "logs", logFileName),
logItem
);
} catch (err) {
console.log(err);
}
};

// call upon the logEvents() to log events
const logger = (req, res, next) => {
logEvents(`${req.method}\t${req.url}\t${req.headers.origin}`, "reqLog.log");
console.log(`${req.method} ${req.path}`);
next();
};

module.exports = { logEvents, logger };
File renamed without changes.
9 changes: 9 additions & 0 deletions lesson_02_ExpressMiddleware/routes/root.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const express = require("express");
const router = express.Router();
const path = require("path");

router.get("^/$|/index(.html)?", (req, res) => {
res.sendFile(path.join(__dirname, "..", "views", "index.html")); // runs the index.html file whenever the route is at "/" or "/index" or "/index.html"
});

module.exports = router;
37 changes: 37 additions & 0 deletions lesson_02_ExpressMiddleware/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const express = require("express");
const app = express();
const path = require("path");
const { logger } = require("./middleware/logger");
const errorHandler = require("./middleware/errorHandler");
const cookieParser = require("cookie-parser");
const cors = require("cors");
const corsOptions = require("./config/corsOptions");
const PORT = process.env.PORT || 3500;

app.use(logger); // log the server RESTFUL Apis activities

app.use(cors(corsOptions)); // by default, no CORS (others cannot access the apis of this site), need to enable it (choose who is allow to access our apis)

app.use(express.json());

app.use(cookieParser()); // parse cookies

app.use("/", express.static(path.join(__dirname, "public"))); // tell express where the static resources are at

app.use("/", require("./routes/root"));

// routes that cannot be resolved will send back different responses based on the requests accept header
app.all("*", (req, res) => {
res.status(404);
if (req.accepts("html")) {
res.sendFile(path.join(__dirname, "views", "404.html"));
} else if (req.accepts("json")) {
res.json({ message: "404 Not Found" });
} else {
res.type("txt").send("404 Not Found");
}
});

app.use(errorHandler);

app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
File renamed without changes.
51 changes: 0 additions & 51 deletions lesson_03/server.js

This file was deleted.

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
36 changes: 36 additions & 0 deletions lesson_03_MongoDB/models/Note.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const mongoose = require("mongoose");
const AutoIncrement = require("mongoose-sequence")(mongoose);

const noteSchema = new mongoose.Schema(
{
user: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "User",
},
title: {
type: String,
required: true,
},
text: {
type: String,
required: true,
},
completed: {
type: Boolean,
default: false,
},
},
{
timestamps: true,
}
);

// create a ticket field inside of the noteSchema that will get the sequential number starting from 500
noteSchema.plugin(AutoIncrement, {
inc_field: "ticket",
id: "ticketNums",
start_seq: 500,
});

module.exports = mongoose.model("Note", noteSchema);
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
56 changes: 56 additions & 0 deletions lesson_03_MongoDB/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
require("dotenv").config();
const express = require("express");
const app = express();
const path = require("path");
const { logger, logEvents } = require("./middleware/logger");
const errorHandler = require("./middleware/errorHandler");
const cookieParser = require("cookie-parser");
const cors = require("cors");
const corsOptions = require("./config/corsOptions");
const connectDB = require("./config/dbConn");
const mongoose = require("mongoose");
const PORT = process.env.PORT || 3500;

console.log(process.env.NODE_ENV);

connectDB();

app.use(logger);

app.use(cors(corsOptions));

app.use(express.json());

app.use(cookieParser());

app.use("/", express.static(path.join(__dirname, "public")));

app.use("/", require("./routes/root"));

app.all("*", (req, res) => {
res.status(404);
if (req.accepts("html")) {
res.sendFile(path.join(__dirname, "views", "404.html"));
} else if (req.accepts("json")) {
res.json({ message: "404 Not Found" });
} else {
res.type("txt").send("404 Not Found");
}
});

app.use(errorHandler);

// An event listener that listens for the "open" event once, which is emitted by Mongoose when the connection to MongoDB is successful.
mongoose.connection.once("open", () => {
console.log("Connected to MongoDB");
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
});

// An event listener that listens for error events emitted by Mongoose when the connection to MongoDB is unsuccessful.
mongoose.connection.on("error", (err) => {
console.log(err);
logEvents(
`${err.no}: ${err.code}\t${err.syscall}\t${err.hostname}`,
"mongoErrLog.log"
);
});
File renamed without changes.
File renamed without changes.
9 changes: 0 additions & 9 deletions lesson_04/routes/root.js

This file was deleted.

File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading