express-Handlebars: Ошибка: отсутствует помощник: "для" - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь использовать очень простой шаблон руля следующим образом:

// movies.hbs
<h1>Movies</h1>
<ul>
    {{#for movies}}
        {{#if this}} 
            <li><a href="http://www.imdb.com/title/{{ this.title }}">{{ this.title }}, {{ this.year }}
            {{this.genre}}</a>    
            </li>     
        {{else}}
            <li>No movies found.</li>
        {{/if}}
    {{/for}}
</ul>

Однако, когда я рендеринг его с использованием полученных документов из базы данных MongoDB,

MongoClient.connect("mongodb://localhost:27017/vidoes", function(err, db) {

        if (err) throw err;
        db.collection('movies').find({}).toArray(function(err, docs) {
        if (err) throw err;
        app.get('/', function(req, res){
            res.render('movies', {'movies':docs});
        });
        app.use(function(req, res){
            res.sendStatus(404);
        });
        var server = app.listen(3000, function() {
            var port = server.address().port;
            console.log("Express server listening on port %s.", port);
        });
    });
});

я получаюстранная ошибка:

$ node app.js                                                                                                                                                                              
Express server listening on port 3000.
Error: Missing helper: "for"
    at Object.<anonymous> (/public_html/All Together Now/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js:19:13)
    at Object.eval [as main] (eval at createFunctionContext (/public_html/All Together Now/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js:254:23), <anonymous>:6:89)

Когда я пробую это без базы данных, это выдает мне ту же ошибку.Конечно, после того, как я захожу на домашнюю страницу.

    app.get('/', function(req, res){
          var docs = [{ "title" : "Minuscule: Valley of the Lost Ants (Minuscule - La vallée des fourmis perdues)", "genre" : "Adventure|Animation|Children", "year" : 1993 },
{  "title" : "Bambi Meets Godzilla", "genre" : "Animation|Comedy", "year" : 2003 },
{ "title" : "Annie Get Your Gun", "genre" : "Musical|Western", "year" : 2011 },
{ "title" : "Scary Movie 5 (Scary MoVie)", "genre" : "Comedy", "year" : 2005 }
];
          res.render('movies', {'movies':docs});
      });

var server = app.listen(3000, function() {
            var port = server.address().port;
            console.log("Express server listening on port %s.", port);
        });

Любая помощь будет принята с благодарностью.

CS

1 Ответ

0 голосов
/ 05 декабря 2018

Вы должны попробовать с each.Посмотрите ниже.

// file tweets.js model
let TweetSchema = mongoose.Schema({
  text: String,
  userId: String,
  createdAt: Date
});
let Tweet = mongoose.model('tweets', TweetSchema);

module.exports = Tweet;

// on server side index.js
routerPublic.get('/', (request, response) => {
  Tweet.find({}).sort('-createdAt').exec(function (error, documents) {
    response.render('pages/home', { user: request.user, tweets: documents });
  });
});



 // in home.jbs

<h2>Tweets</h2>

{{# each tweets }}
    <div class="panel panel-default">
        <div class="panel-body">
            {{ text }}
        </div>

        <div class="panel-footer">
            {{ userId }} &bull; {{ niceTime createdAt }}
        </div>
    </div>
{{ else }}
    <div class="panel panel-default">
        <div class="panel-body">
            No tweets yet. <a href="/tweet">Click here</a> to Tweet.
        </div>
    </div>
{{/each}}

Если вы хотите пойти с некоторыми дополнительными вещами, то я буду ссылаться на создание помощника https://gist.github.com/LeCoupa/6176077a9a8e2ad00eda

...