Невозможно получить сообщения от MongoDB, используя gulp-data

Подход: используйте gulp для создания статического html с постами из mongodb

Стек: экспресс, mongodb, мопс, глоток

TL:DR У меня есть экспресс-приложение с подключенным mongodb и несколько сообщений, которые отображаются на моей целевой странице. На каждом сервере все работает, он также работает в prod-среде. Но в дополнение к этому я также хочу статическую версию моей целевой страницы. Я знаю, что есть много необычных генераторов статических сайтов, но я фанат глотка и хочу, чтобы он был ручной работы =)

У меня есть этот gulptask, который уже подключен в MongoClient к моей локальной БД (db: passport, collection: posts) и console.logs мои сообщения

Я думаю, что это не так, но я могу успешно регистрировать сообщения в функции данных.

gulp.task('db-test', function() {
    return gulp.src('views/index.pug')
      .pipe(data(function(file, cb) {
        MongoClient.connect('mongodb://localhost:27017/passport', function(err, db) {
          db.collection('posts').find().forEach(function(doc) {
            console.log(doc) // This logs each of my posts from the mongodb - yayy but how to pass it correctly to the pug function below?
          });
          if(err) return cb(err);
          cb(undefined, db.collection('posts').find());
      });
    }))

    .pipe(pug({
    // here Im using a static array, otherwise the posts are not logged in the data function
      locals: {posts: [{title: "blabal"}, {title: "heyhey"}]}
    }))
    // If im doing like in the instruction of gulp-data, it breaks in my template 
    // .pipe(pug({}))
    .pipe(gulp.dest('./dist'))
});

шаблон

ul
  each val in posts
    li= val.title

Когда я удаляю эту динамическую часть, gulp taks генерирует мой html без проблем.

Версия, как это должно работать (но не работает)

gulp.task('db-test', function() {
 return gulp.src('views/index.pug')
  .pipe(data(function(file, cb) {
     MongoClient.connect('mongodb://localhost:27017/passport', function(err, db) {
        if(err) return cb(err);
        cb(undefined, db.collection('posts').find());
      });
    }))
   .pipe(pug({})) // now my gulp-pug tasks says cannot find length of undefined = no posts found or just accessing the Cursor from the mongo collection - i dont know...
   .pipe(gulp.dest('./dist'))
});

Когда я отлаживаю свое задание глотка, я вижу, что db.collection('posts').find() это ожидаемое обещание. Я также попытался решить это, но безуспешно.

Глотай Героя там - помоги мне!

0 ответов

Другие вопросы по тегам