Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // server.ts
- import express, { Express, NextFunction, Request, Response } from "express";
- import mongoose, { Error } from "mongoose";
- import Blog from "../models/blog";
- // --- Initialization ---
- // Initialize variables
- const port: number = 8000;
- const dbURI: string = "mongodb+srv://joof:[email protected]/racoon-blog?retryWrites=true&w=majority";
- // Connect to mongo
- mongoose
- .connect(dbURI)
- .then(() => {
- console.log("Connected to DB");
- app.listen(port, () =>
- console.log(`Listening to http://localhost:${port}`)
- );
- })
- .catch((err: Error) => {
- console.log("Failed to connect to DB.");
- console.log("Error: " + err);
- });
- const app: Express = express(); // Create express app
- app.set("view engine", "ejs"); // Tells express to use .ejs files for rendering
- // --- Middleware ---
- app.use(express.static("public")); // Allow use of static files (must be in the public folder)
- app.use(express.urlencoded({ extended: true })); // Let's us process information sent from webforms
- app.use((req: Request, res: Response, next: NextFunction) => {
- const reqInfo = {
- host: req.hostname,
- path: req.path,
- method: req.method,
- };
- console.log("New request made!");
- console.log(reqInfo);
- next();
- });
- // --- Routes ---
- app.get("/", (req: Request, res: Response) => {
- res.redirect("/blogs");
- });
- app.get("/blogs", (req: Request, res: Response) => {
- console.log(req.params);
- Blog.find()
- .sort({ createdAt: -1 })
- .then((result) => {
- res.render("index", { blogs: result });
- })
- .catch((err: Error) => {
- console.log(err);
- });
- });
- app.get("/blogs/create", (req: Request, res: Response) => {
- res.render("new-blog");
- });
- app.post("/blogs", (req: Request, res: Response) => {
- const newBlog: any = new Blog({ // Need type annotation!
- title: req.body.title,
- desc: req.body.desc == "" ? "No description provided." : req.body.desc,
- content: req.body.content,
- author: req.body.author == "" ? "Anonymous" : req.body.author,
- });
- newBlog.save()
- .then((result: any) => { // Need type annotation!
- console.log(`Successfully saved blog ${result._id}`);
- res.redirect("/blogs");
- })
- .catch((err: Error) => {
- console.log(err);
- });
- });
- app.get("/blogs/:id", (req: Request, res: Response) => {
- const id: string = req.params.id;
- Blog.findById(id)
- .then((result: any) => { // Need type annotation!
- if (result) {
- res.render("blog", {
- title: result.title,
- desc: result.desc,
- content: result.content,
- author: result.author,
- });
- } else {
- res.render("404"); // Blog not found, render 404 page
- }
- })
- .catch((err: Error) => {
- console.log(err);
- res.render("404"); // Error occurred, render 404 page
- });
- });
- app.get("/abyss", (req: Request, res: Response) => {
- res.render("abyss");
- });
- app.use((req: Request, res: Response) => {
- res.render("404");
- });
- // blog.ts
- import mongoose, { Schema, Model } from "mongoose";
- const blogSchema: Schema = new Schema({
- title: {
- type: String,
- required: true
- },
- desc: {
- type: String,
- required: true
- },
- content: {
- type: String,
- required: true
- },
- author: {
- type: String,
- required: false
- }
- }, { timestamps: true });
- const Blog: Model<any> = mongoose.model("Blog", blogSchema);
- export default Blog;
- export { Blog, blogSchema };
Add Comment
Please, Sign In to add comment