The route GET : /viewpost does not exist. What am I doing wrong?

50 Views Asked by At

I am a student and am stuck here. I tried looking for information but could not find any. I appreciate any help. Not sure if this is all that is need, but if you need to see more, please ask. Thanks for all the help/guidance

var express = require('express');
const {isLoggedIn} = require('../middleware/protectors');
const {getRecentPosts} = require('../middleware/posts')
var router = express.Router();

/* GET home page. */
router.get('/',getRecentPosts , function(req, res, next) {
  res.render('index', {css:["style.css"]});
});

router.get("/login", function(req, res){
  res.render('login', {css:["style.css"]});
});

//METHOD : GET
//localhost:3000/register
router.get("/register", function(req, res){
  res.render('registration', {css:["style.css"]});
});



router.get("/postimage",isLoggedIn, function(req, res){
  res.render('postimage', {css:["style.css"]});
});

router.get("/posts/:id(\\d+)", function(req, res){
  res.render('viewpost', {js:["viewpost.js"]});
});

module.exports = router;

const createError = require("http-errors");
const express = require("express");
const favicon = require('serve-favicon');
const path = require("path");
const cookieParser = require("cookie-parser");
const logger = require("morgan");
const handlebars = require("express-handlebars");
const session = require('express-session');
const MySQLStore = require('express-mysql-session')(session);
const flash = require('express-flash');

const indexRouter = require("./routes/index");
const usersRouter = require("./routes/users");
const postsRouter = require("./routes/posts");


const app = express();

app.engine(
  "hbs",
  handlebars({
    layoutsDir: path.join(__dirname, "views/layouts"), //where to look for layouts
    partialsDir: path.join(__dirname, "views/partials"), // where to look for partials
    extname: ".hbs", //expected file extension for handlebars files
    defaultLayout: "layout", //default layout for app, general template for all pages in app
    helpers: {
      nonEmptyObject: function(obj){
        return !(obj && obj.constructo === Object && Object.keys(obj).length == 0);
      },
      formatDate: function(dateString){
        return new Date(dateString).toLocaleString();
      }
    }, //adding new helpers to handlebars for extra functionality
  })
);

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "hbs");

var sessionStore = new MySQLStore({}, require('./conf/database'));

app.use(
  session({
    key: 'csid',
    secret: 'csc317 secret',
    store: sessionStore,
    resave: false,
    saveUninitialized: false,
    })
  );

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser('csc317 secret'));
app.use(flash());

app.use(favicon(__dirname + '/public/favicon.ico'));
// anything that that is in this folder, look at it
app.use("/public", express.static(path.join(__dirname, "public")));

app.use(function(req,res,next){
  console.log(req.session);
  if(req.session.username){
    res.locals.isLoggedIn = true;
    res.locals.username = req.session.username;
  }
  next();
})

app.use("/", indexRouter); // route middleware from ./routes/index.js
app.use("/users", usersRouter); // route middleware from ./routes/users.js
app.use("/posts", postsRouter);


/**
 * Catch all route, if we get to here then the 
 * resource requested could not be found.
 */
app.use((req,res,next) => {
  next(createError(404, `The route ${req.method} : ${req.url} does not exist.`));
})
  

/**
 * Error Handler, used to render the error html file
 * with relevant error information.
 */
app.use(function (err, req, res, next) {
  res.locals.message = err.message;
  res.locals.error = err;
  console.log(err);
  // render the error page
  res.status(err.status || 500);
  res.render("error");
});

module.exports = app;

I tried googling but could not find/understand what I found.

I am trying to view the Post that suppose to be in my viewpost.hbs file

1

There are 1 best solutions below

2
On

Your route does point to /posts/:id and not /viewpost

router.get("/posts/:id(\\d+)", function(req, res){
  res.render('viewpost', {js:["viewpost.js"]});
});