res.format.html不使用paginate模块

时间:2014-09-06 17:27:52

标签: node.js express pagination

我正在使用express-paginate模块,而我在路由文件中的res.format部分遇到了一些问题。我想知道为什么这部分导致在渲染我的视图文件时找不到分页。

错误消息:

ReferenceError: /Users/user/Desktop/Projects/node/blog/views/pages/blog.ejs:7
    5| 
    6| <body>
 >> 7| 
    8|  <header>
    9|      <% include ../partials/header %>
    10|     </header>

paginate is not defined
    at buf.push.
            </div>
        </div>

    </div>


    <div class="paginate">
        .
    </div>

    <footer>
        .buf (eval at <anonymous> (/Users/user/Desktop/Projects/node/blog/node_modules/ejs/lib/ejs.js:242:14), <anonymous>:34:125)
    at eval (eval at <anonymous> (/Users/user/Desktop/Projects/node/blog/node_modules/ejs/lib/ejs.js:242:14), <anonymous>:35:23)
    at eval (eval at <anonymous> (/Users/user/Desktop/Projects/node/blog/node_modules/ejs/lib/ejs.js:242:14), <anonymous>:37:67)
    at /Users/user/Desktop/Projects/node/blog/node_modules/ejs/lib/ejs.js:255:15
    at Object.exports.render (/Users/user/Desktop/Projects/node/blog/node_modules/ejs/lib/ejs.js:293:13)
    at View.exports.renderFile [as engine] (/Users/user/Desktop/Projects/node/blog/node_modules/ejs/lib/ejs.js:323:20)
    at View.render (/Users/user/Desktop/Projects/node/blog/node_modules/express/lib/view.js:76:8)
    at Function.app.render (/Users/user/Desktop/Projects/node/blog/node_modules/express/lib/application.js:517:10)
    at ServerResponse.res.render (/Users/user/Desktop/Projects/node/blog/node_modules/express/lib/response.js:955:7)
    at Object.res.format.html (/Users/user/Desktop/Projects/node/blog/app/routes.js:70:13)

routes.js:

var express = require('express');
var app = express();
var router = express.Router();
var blogDB = require('../config/blogDB.js');
var Blogpost = require('./models/blogModel.js');
var paginate = require('express-paginate');

//index
    router.route('/')
    .get(function(req, res) {
    var drinks = [
            {   name: 'Bloody Mary', drunkness: 3 },
            {   name: 'Martini', drunkness: 5 },
            {   name: 'Scotch', drunkness: 10}
        ];

        var tagline = "Lets do this.";

        res.render('pages/index', {
            drinks: drinks,
            tagline: tagline
        });
    });


app.use(paginate.middleware(10, 50));


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

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

            var blogpost = new Blogpost(); // create a new instance of a Blogpost model

            blogpost.title = req.body.title; // set the blog title
            blogpost.author = req.body.author; // set the author name
            blogpost.content = req.body.content; // set the blog content
            blogpost.date = req.body.date; // set the date of the post
                //Save Blog Post
                blogpost.save(function(err) {
                    if (err)
                        res.send(err);

                    res.json({ message: 'Blog created.' });
                });

        }) // END POST method


        // START GET method
        .get(function(req, res, next) {

            Blogpost.paginate({}, req.query.page, req.query.limit, function(err, pageCount, blogpost, itemCount) {

                if (err) return next(err)

                    Blogpost.find(function(err, blogpost) {
                        if (err)
                            res.send(err);

                        blogpost.title = req.body.title; // update the blog title
                        blogpost.author = req.body.author; // set the author name
                        blogpost.content = req.body.content; // update the blog content
                        blogpost.date = req.body.date; // set the date of the post

                        res.format({
                            html: function() {
                                res.render('pages/blog', {
                                    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)
                    }) // END Find Blogpost 
            }); // END Blogpost.paginate
        }); // END GET method


    //Route for individual blogs
    router.route('/blog/:blogpost_id')

    // START GET method blog by ID  
    .get(function(req, res) {
        Blogpost.findById(req.params.blogpost_id, function(err, blog) {
            if (err)
                res.send(err);
            res.json(blog);
        });
    }) // END GET method blog by ID

    // START PUT method
    .put(function(req, res) {

        Blogpost.findById(req.params.blogpost_id, function(err, blogpost) {

            if (err)
                res.send(err);


            blogpost.title = req.body.title; // update the blog title
            blogpost.author = req.body.author; // set the author name
            blogpost.content = req.body.content; // update the blog content
            blogpost.date = req.body.date; // set the date of the post

            blogpost.save(function(err) {
                if (err)
                    res.send(err);


                res.json({ message: 'Blog updated.' });
            });

        });

    }) // END PUT method

    // START DELETE method
    .delete(function(req, res) {

        Blogpost.remove({
            _id: req.params.blogpost_id

        }, function(err, bear) {
            if (err)
                res.send(err);

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



//about
    router.get('/about', function(req, res) {
            res.render('pages/about');
    });


module.exports = router;

paginate.ejs:

<div class="grid">
    <div class="col-1-1">
        <div class="paginate">


                <ul>
                <% if (paginate.hasPreiousPages) { %>
                    <li>
                        <a href="<%=paginate.href().prev %>">Previous</a>
                    </li>
                <% } %>

                <% if (paginate.hasNextPages) { %>
                    <li>
                        <a href="<%=paginate.href().next %>">Next</a>
                    </li>
                <% } %>
                </ul>


        </div>
    </div>
</div>

blog.ejs:

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

<body>

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

    <div class="grid">
        <div class="col-1-1">
            <div class="body-content">
                <% blogpost.forEach(function(blogpost) { %>
                    <tr>
                        <td><h2><%= blogpost.title %></h2></td>
                        <td><h3><%= blogpost.author %></h3></td>
                    </tr>
                    <% }); %>
            </div>
        </div>

    </div>


    <div class="paginate">
        <% include ../partials/paginate %>
    </div>

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

</body>
</html>

1 个答案:

答案 0 :(得分:0)

在routes.js文件的第二行,您正在调用

var app = express();

这一行创建了一个新的快递应用程序。 然后在这个新应用程序上使用分页中间件,

这不是“正在运行”的应用,您可以在app.js中找到主应用实例

您的所有请求都是由app.js中创建的应用程序处理的,这样就不会调用paginare中间件。

解决此问题

1:从routes.js

中删除这两行
var app = express();

var paginate = require('express-paginate');

2:在app.js中添加(在加载路线之前)

var paginate = require('express-paginate');
app.use(paginate.middleware(10, 50));

或者,如果您只想对该特定路线组使用分页, 除去

var app = express();

并使用

router.use(paginate.middleware(10, 50));