ExpressJs - 查找匹配路由参数的记录

时间:2015-01-27 16:40:21

标签: javascript node.js express mongoose ejs

我一直在为我的ExpressJS应用程序构建一个标记系统,并且我已经能够创建我的路由以获取用于我的记录的各个标记,但我遇到的问题是尝试显示内容与所选标签相关联。例如,一条记录有一个标签“鼠标”,当点击路线时,路线正确地转到/tag/mouse,但我不确定是否应该在我的模板中使用一个循环来显示那些值,或者我是否真的应该在我的路线中使用方法。我目前没有使用任何内容,标记页面上显示的值为undefined。我觉得路线方法就是我想要的。

以下是我的路线文件的主要焦点:

var express = require('express');
var router = express.Router();
var passport = require('passport');

    var blogDB = require('../config/blogDB.js');
    var Blogpost = require('./models/blogModel.js');
    var paginate = require('express-paginate');
    var http = require('http');
    var path = require('path');
    var aws = require('aws-sdk');
    router.route('/admin/posts/create')

        // START POST method
            .post(function(req, res) {

                console.log("New instance");
                console.log(req.body.tags);
                var blogpost = new Blogpost(); // create a new instance of a Blogpost model

                blogpost.title = req.body.title; // set the blog title
                blogpost.featureImage = req.body.featureImage; // set the blog image
                blogpost.blogUrl = blogpost.title.toLowerCase().replace(/\s+/g,"-");
                blogpost.author = req.body.author; // set the author name
                blogpost.tagline = req.body.tagline; // set the tagline
                blogpost.content = req.body.content; // set the blog content
                blogpost.category = req.body.category; // set the category
                blogpost.tags = req.body.tags.trim().split(","); // set the tags

                    //Save Blog Post
                    blogpost.save(function(err) {
                        if (err)
                            res.send(err);

                        res.redirect(303, '/'); //NEEDS TO BE CHANGED
                    });

            }) // END POST method


            .get(isLoggedIn, function(req, res, blogpost) {
                res.render('pages/blogpost-create', {
                  blogpost : blogpost
                });
            });

    function getSearchCriteria(params) {
          return {
              blogUrl: params.blogpost_blogUrl
          };
    }


    router.route('/blog/:blogpost_blogUrl')

        .get(function (req, res) {
             var searchCriteria = getSearchCriteria(req.params);
             Blogpost.findOne(searchCriteria, function (err, blogpost) {
                 if (err)
                     res.send(err);
                 res.render('pages/blogpost', {
                     blogpost: blogpost
                 })
             })
         })
         .put(function (req, res) {
             var searchCriteria = getSearchCriteria(req.params);
             var updated = getBlogpostUpdate(req.body)
             Blogpost.findOneAndUpdate(searchCriteria, updated, function (err, updated) {
                 if (err)
                     res.send(err);


                 res.json({ message: 'Blog updated.' });
             });
         })
         .delete(function (req, res) {
             var searchCriteria = getSearchCriteria(req.params);
             Blogpost.findOneAndRemove(searchCriteria, function (err, removed) {
                 if (err)
                    res.send(err);

                 res.json({ message: 'Successfully deleted' });
             });
         });


    router.get('/tag/:blogpost_tags', function(req, res, next) {
        Blogpost.paginate({}, req.query.page, req.query.limit, function(err, pageCount, blogpost, itemCount) {
                if (err) return next(err)
                  if (err)
                    res.send(err);

                  res.format({
                                html: function() {
                                    res.render('pages/tag', {
                                        blogpost: blogpost,
                                        pageCount: pageCount,
                                        itemCount: itemCount
                                    })
                                },
                                json: function() {

                                    res.json({
                                        object: 'blogpost',
                                        has_more: paginate.hasNextPages(req)(pageCount),
                                        data: blogpost
                                    })
                                }
                            }); // END res.format(html, json)
                }, {sortBy: {'date': -1} } ); // END Blogpost.paginate
        });

型号:

var mongoose    = require('mongoose');
var mongoosePaginate = require('mongoose-paginate');
var Schema      = mongoose.Schema;



var BlogPostSchema  = new Schema({
        title: String,
        featureImage: String,
        blogUrl: String,
        author: String,
        tagline: String,
        category: String,
        content: String,
        tags: { type: Array, lowercase: true },
        date: { type: Date, default: Date.now() }
});

BlogPostSchema.post('init', function (post) {
    var date = new Date(post.date || Date.now() );
    post.dateString = date.getMonth() + 1 + '/' + date.getDate() + '/' + date.getFullYear();

});

BlogPostSchema.plugin( mongoosePaginate );

var Blogpost = mongoose.model("Blogpost", BlogPostSchema);



module.exports = mongoose.model('Blogpost', BlogPostSchema);

标签页(EJS):

<html>
<head>
    <% include ../partials/head %>
</head>

<body>

    <header>
        <% include ../partials/header %>
    </header>

    <div class="container">
        <div class="col-md-12">

            <%= blogpost.tags %>
        </div>
    </div>

    <footer>
        <% include ../partials/footer %>
    </footer>

</body>
</html>

0 个答案:

没有答案