2014-09-06 54 views
0

我正在使用express-paginate模塊,我遇到了我的路由文件中圍繞res.format部分的一些問題。我想知道爲什麼這部分導致分頁時,我沒有找到當我渲染我的視圖文件。res.format.html不能與paginate模塊一起工作

錯誤消息:

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> 

回答

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)); 
+0

嘿@MarkMeeus。感謝您的解釋。這固定我的最初錯誤,現在我可以呈現我的分頁,但現在我有一個問題,我點擊下一個按鈕,並給了一個'無法GET/undefined'頁面。這是來自路由格式的問題嗎? – cphill 2014-09-08 02:35:39

+0

嘗試paginate.href()鏈接到下一頁,paginate.href(true)鏈接到前一頁 – 2014-09-08 19:28:53

+0

仍然沒有這樣做。之前的鏈接沒有顯示,這是正確的,因爲我在第一頁上,但我仍然得到相同的錯誤。這是來自建模或路由的常見錯誤消息嗎? – cphill 2014-09-10 01:41:36