Guest User

Untitled

a guest
Sep 27th, 2023
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // server.ts
  2. import express, { Express, NextFunction, Request, Response } from "express";
  3. import mongoose, { Error } from "mongoose";
  4. import Blog from "../models/blog";
  5.  
  6. // --- Initialization ---
  7.  
  8. // Initialize variables
  9. const port: number = 8000;
  10. const dbURI: string = "mongodb+srv://joof:[email protected]/racoon-blog?retryWrites=true&w=majority";
  11.  
  12. // Connect to mongo
  13. mongoose
  14.   .connect(dbURI)
  15.   .then(() => {
  16.     console.log("Connected to DB");
  17.     app.listen(port, () =>
  18.       console.log(`Listening to http://localhost:${port}`)
  19.     );
  20.   })
  21.   .catch((err: Error) => {
  22.     console.log("Failed to connect to DB.");
  23.     console.log("Error: " + err);
  24.   });
  25.  
  26. const app: Express = express(); // Create express app
  27.  
  28. app.set("view engine", "ejs"); // Tells express to use .ejs files for rendering
  29.  
  30. // --- Middleware ---
  31. app.use(express.static("public")); // Allow use of static files (must be in the public folder)
  32. app.use(express.urlencoded({ extended: true })); // Let's us process information sent from webforms
  33.  
  34. app.use((req: Request, res: Response, next: NextFunction) => {
  35.   const reqInfo = {
  36.     host: req.hostname,
  37.     path: req.path,
  38.     method: req.method,
  39.   };
  40.  
  41.   console.log("New request made!");
  42.   console.log(reqInfo);
  43.  
  44.   next();
  45. });
  46.  
  47. // --- Routes ---
  48.  
  49. app.get("/", (req: Request, res: Response) => {
  50.   res.redirect("/blogs");
  51. });
  52.  
  53. app.get("/blogs", (req: Request, res: Response) => {
  54.   console.log(req.params);
  55.   Blog.find()
  56.     .sort({ createdAt: -1 })
  57.     .then((result) => {
  58.       res.render("index", { blogs: result });
  59.     })
  60.     .catch((err: Error) => {
  61.       console.log(err);
  62.     });
  63. });
  64.  
  65. app.get("/blogs/create", (req: Request, res: Response) => {
  66.   res.render("new-blog");
  67. });
  68.  
  69. app.post("/blogs", (req: Request, res: Response) => {
  70.   const newBlog: any = new Blog({       // Need type annotation!
  71.     title: req.body.title,
  72.     desc: req.body.desc == "" ? "No description provided." : req.body.desc,
  73.     content: req.body.content,
  74.     author: req.body.author == "" ? "Anonymous" : req.body.author,
  75.   });
  76.  
  77.   newBlog.save()
  78.     .then((result: any) => {    // Need type annotation!
  79.       console.log(`Successfully saved blog ${result._id}`);
  80.       res.redirect("/blogs");
  81.     })
  82.     .catch((err: Error) => {
  83.       console.log(err);
  84.     });
  85. });
  86.  
  87. app.get("/blogs/:id", (req: Request, res: Response) => {
  88.   const id: string = req.params.id;
  89.   Blog.findById(id)
  90.     .then((result: any) => {    // Need type annotation!
  91.       if (result) {
  92.         res.render("blog", {
  93.           title: result.title,
  94.           desc: result.desc,
  95.           content: result.content,
  96.           author: result.author,
  97.         });
  98.       } else {
  99.         res.render("404"); // Blog not found, render 404 page
  100.       }
  101.     })
  102.     .catch((err: Error) => {
  103.       console.log(err);
  104.       res.render("404"); // Error occurred, render 404 page
  105.     });
  106. });
  107.  
  108. app.get("/abyss", (req: Request, res: Response) => {
  109.   res.render("abyss");
  110. });
  111.  
  112. app.use((req: Request, res: Response) => {
  113.   res.render("404");
  114. });
  115.  
  116. // blog.ts
  117. import mongoose, { Schema, Model } from "mongoose";
  118.  
  119. const blogSchema: Schema = new Schema({
  120.   title: {
  121.     type: String,
  122.     required: true
  123.   },
  124.   desc: {
  125.     type: String,
  126.     required: true
  127.   },
  128.   content: {
  129.     type: String,
  130.     required: true
  131.   },
  132.   author: {
  133.     type: String,
  134.     required: false
  135.   }
  136. }, { timestamps: true });
  137.  
  138. const Blog: Model<any> = mongoose.model("Blog", blogSchema);
  139. export default Blog;
  140. export { Blog, blogSchema };
Add Comment
Please, Sign In to add comment