express-members-only/controllers/message.js
2023-09-12 20:33:23 -07:00

69 lines
1.9 KiB
JavaScript

const Message = require("../models/message.js");
const asyncHandler = require("express-async-handler");
const { body, validationResult } = require("express-validator");
const { default: mongoose } = require("mongoose");
exports.index = asyncHandler(async (req, res, next) => {
// gets message from database
const message = await Message.findOne({ _id: req.params.message })
.lean()
.exec();
res.render("message", {
message: message,
user: req.user,
});
});
exports.message_create_get = (req, res, next) => {
res.render("createmessage");
};
exports.message_create_post = [
// Validate and sanitize title
body("title", "Please enter Insight title!")
.trim()
.isLength({ min: 1 })
.escape(),
// Validate and sanitize text
body("message", "Please enter your Insight!")
.trim()
.isLength({ min: 1 })
.escape(),
// Process request after validation and sanitization.
asyncHandler(async (req, res, next) => {
// Extract the validation errors from a request.
const errors = validationResult(req);
// if there are validation errors
if (!errors.isEmpty()) {
// Render the creation form again with sanitized values/error messages.
res.render("createmessage", {
errors: errors.array(),
});
return;
}
// Data from form is valid.
else {
// create new user with temporary password
let message = new Message({
title: req.body.title,
date: new Date(),
text: req.body.message,
author: req.user.name,
_id: new mongoose.Types.ObjectId(),
});
await message.save();
// saved. Redirect to home page.
res.redirect(`/`);
}
}),
];
exports.message_delete_get = asyncHandler(async (req, res, next) => {
// delete message from database
await Message.findByIdAndDelete(req.params.message);
res.redirect("/");
});