最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Express.js应用程序错误:帖子ID为类别名称

IT培训 admin 14浏览 0评论

Express.js应用程序错误:帖子ID为类别名称

我正在使用blogging application,Express和MongoDB开发EJS(单击链接以查看GitHub回购)。>

我有帖子

,它们被归类为类别,每个都在其自己的集合中。

我按类别筛选帖子:Sport

类别中的所有帖子都显示在http://localhost:3000/sportTravel类别中的所有帖子都显示在http://localhost:3000/travel

为此,我引入了路线router.get('/:catname', postsController.getPostsByCategory);

const express = require('express');
const postsController = require('../../controllers/front-end/posts');

// Express router
const router = express.Router();

// Get Posts
router.get('/', postsController.getPosts);

// Get Posts by Category
router.get('/:catname', postsController.getPostsByCategory);

// Get Single Post
router.get('/:id', postsController.getSinglePost);

module.exports = router;

类别确实按类别进行过滤,但是router.get('/:catname',postsController.getPostsByCategory);和router.get('/:id', postsController.getSinglePost);发生冲突,以致不再显示单个帖子

这是因为帖子ID用于类别路由。

在控制器中,我有两种方法getPostsByCategorygetSinglePost

exports.getPostsByCategory = async (req, res, next) => {

    function titleize(slug) {
        var words = slug.split("-");
        return words.map(function(word) {
            return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();
        }).join(' ');
    }

    const postCategory = new RegExp(titleize(req.params.catname),"ig");

    const singleCategory = await Category.findOne({cat_name:postCategory})

    const posts = await Post.find({ category : singleCategory }, (err, posts) => {
        if (err) {
            console.log('Error: ', err);
        } else {
            res.render('default/index', {
                moment: moment,
                layout: 'default/layout',
                website_name: 'MEAN Blog',
                page_heading: 'XPress News',
                page_subheading: 'A MEAN Stack Blogging Application',
                posts: posts.reverse(),
            });
        }
    }).populate('category');
};

exports.getSinglePost = (req, res, next) => {
    let id = req.params.id;
    if (id.match(/^[0-9a-fA-F]{24}$/)) {
        Post.findById(id, function(err, post) {
            if (err) {
                console.log('Error: ', err);
            } else {
                res.render('default/singlepost', {
                    layout: 'default/layout',
                    website_name: 'MEAN Blog',
                    post: post
                });
            }
        });
    }
};

我想以在类别中显示帖子的URL保持模式http://localhost:3000/category-name的方式解决此问题。

我该如何实现?

我正在使用Express,EJS和MongoDB开发博客应用程序(单击链接以查看GitHub存储库)。我有按类别分组的帖子,每个帖子都有自己的收藏集。我筛选...

回答如下:

这些实际上都是同一条路线:

Express.js应用程序错误:帖子ID为类别名称

我正在使用blogging application,Express和MongoDB开发EJS(单击链接以查看GitHub回购)。>

我有帖子

,它们被归类为类别,每个都在其自己的集合中。

我按类别筛选帖子:Sport

类别中的所有帖子都显示在http://localhost:3000/sportTravel类别中的所有帖子都显示在http://localhost:3000/travel

为此,我引入了路线router.get('/:catname', postsController.getPostsByCategory);

const express = require('express');
const postsController = require('../../controllers/front-end/posts');

// Express router
const router = express.Router();

// Get Posts
router.get('/', postsController.getPosts);

// Get Posts by Category
router.get('/:catname', postsController.getPostsByCategory);

// Get Single Post
router.get('/:id', postsController.getSinglePost);

module.exports = router;

类别确实按类别进行过滤,但是router.get('/:catname',postsController.getPostsByCategory);和router.get('/:id', postsController.getSinglePost);发生冲突,以致不再显示单个帖子

这是因为帖子ID用于类别路由。

在控制器中,我有两种方法getPostsByCategorygetSinglePost

exports.getPostsByCategory = async (req, res, next) => {

    function titleize(slug) {
        var words = slug.split("-");
        return words.map(function(word) {
            return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();
        }).join(' ');
    }

    const postCategory = new RegExp(titleize(req.params.catname),"ig");

    const singleCategory = await Category.findOne({cat_name:postCategory})

    const posts = await Post.find({ category : singleCategory }, (err, posts) => {
        if (err) {
            console.log('Error: ', err);
        } else {
            res.render('default/index', {
                moment: moment,
                layout: 'default/layout',
                website_name: 'MEAN Blog',
                page_heading: 'XPress News',
                page_subheading: 'A MEAN Stack Blogging Application',
                posts: posts.reverse(),
            });
        }
    }).populate('category');
};

exports.getSinglePost = (req, res, next) => {
    let id = req.params.id;
    if (id.match(/^[0-9a-fA-F]{24}$/)) {
        Post.findById(id, function(err, post) {
            if (err) {
                console.log('Error: ', err);
            } else {
                res.render('default/singlepost', {
                    layout: 'default/layout',
                    website_name: 'MEAN Blog',
                    post: post
                });
            }
        });
    }
};

我想以在类别中显示帖子的URL保持模式http://localhost:3000/category-name的方式解决此问题。

我该如何实现?

我正在使用Express,EJS和MongoDB开发博客应用程序(单击链接以查看GitHub存储库)。我有按类别分组的帖子,每个帖子都有自己的收藏集。我筛选...

回答如下:

这些实际上都是同一条路线:

发布评论

评论列表 (0)

  1. 暂无评论