无法使用gulp-data

时间:2018-02-11 19:33:07

标签: node.js mongodb gulp gulp-data

方法:使用gulp创建包含来自mongodb的帖子的静态html

Stack::express,mongodb,pug,gulp

TL:DR 我有一个明确的应用程序与连接的mongodb和一些帖子显示在我的登陆页面上。每台服务器一切正常,它也可以在prod环境中运行。但除此之外,我还想要一个我的登陆页面的静态版本。 我知道那里有许多花哨的静态站点生成器,但我是gulp的粉丝,想要手工制作=)

我有这个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'))
});

当我调试我的gulp任务时,我发现db.collection('posts').find()是一个未决的承诺。我也试图解决这个问题,但没有成功。

Gulp Heros在那里 - 帮助我!

0 个答案:

没有答案