채용 공고 웹 사이트: 게시물 작성




GitHub: https://github.com/Sokhavuth/opine-job
데노 배치: https://khmerweb-job.deno.dev/users/post

우리는 필요에 따라 다른 결과를 얻기 위해 하나의 경로에 대해 다른 핸들러와 함께 다른 HTTP 메서드를 사용할 수 있다는 것을 이미 알고 있습니다. 예를 들어 "/users/post"경로와 함께 HTTP GET 메서드를 사용하여 대시보드에 게시 페이지를 표시할 수 있으며 동일한 경로 "/users/post"와 함께 HTTP POST 메서드를 사용하여 게시물을 생성하고 삽입할 것입니다. MongoDB 데이터베이스에 항목.

게시물을 작성하고 데이터베이스에 삽입하는 작업은 등록된 사용자에게만 예약되어 있으므로 인증 여부를 확인하기 위해 이 경로를 사용하려는 사람을 확인하여 이 "/users/post"경로를 방어해야 합니다.


// routes/users/post.js

import { Router } from "../../deps.ts";
const router = new Router();

import post from "../../controllers/users/post.js"

router.get("/", async (req, res) => {
    if(await req.mysession.get("user")){
        post.getPage(req, res);
    }else{ 
        res.redirect("/users");
    }
});

router.post("/", async (req, res) => {
    if(await req.mysession.get("user")){
        post.createPost(req, res);
    }else{
        res.redirect("/users");
    }
})


export default router;



// controllers/users/post.js

import post from "../../views/users/post.jsx";
import postdb from "../../models/post.ts";


class Post{
    async getPage(req, res){
        const config = req.mysetting();
        config.page_title = "Post Page";
        config.route = "/users/post";
        config.username = (await req.mysession.get("user")).title;

        const html = await post(config);
        res.send(html);
    }

    async createPost(req, res){
        if((await req.mysession.get("user")).role in {'Admin':1,'Editor':1,'Author':1}){
            await postdb.createPost(req);
        }

        res.redirect("/users/post");
    }
}


export default new Post();



// models/post.ts


interface PostSchema {
    _id: ObjectId;
    id: string; 
    title: string;
    content: string;
    categories: string[];
    thumb: string;
    date: string;
    userid: string;
}

class Post{
    async count(req, query={}){
        const posts = req.mydb.collection<PostSchema>("posts");
        return await posts.countDocuments(query);
    }

    async createPost(req){
        const id = crypto.randomUUID();

        let categories: string[];

        if(req.body.categories.includes(',')){
            categories = req.body.categories.split(',');
        }else{
            categories = [req.body.categories]
        }

        const new_post = {
            id: id, 
            title: req.body.title,
            content: req.body.content,
            categories: categories,
            thumb: req.body.thumb,
            date: req.body.datetime,
            userid: (await req.mysession.get("user")).id,
        }

        const posts = req.mydb.collection<PostSchema>("posts")
        await posts.insertOne(new_post)
    }
}

export default new Post();

좋은 웹페이지 즐겨찾기