【问题标题】:How to perform initial setup in koa with rethinkdb如何使用 rethinkdb 在 koa 中执行初始设置
【发布时间】:2015-09-29 18:39:20
【问题描述】:

我将 rethinkdbdash 与 koa 一起使用,并试图弄清楚如何在应用程序首次启动时执行数据库设置。我试图完成类似于 Segphalt 的 instagram 猫猫教程但使用 koa 的东西。

var conn;
r.connect(config.database).then(function(c) {
  conn = c;
  return r.dbCreate(config.database.db).run(conn);
})
.then(function() {
  return r.tableCreate("instacat").run(conn);
})
.then(function() {
  return q.all([
    r.table("instacat").indexCreate("time").run(conn),
    r.table("instacat").indexCreate("place", {geo: true}).run(conn)
  ]);
})
.error(function(err) {
  if (err.msg.indexOf("already exists") == -1)
    console.log(err);
})
.finally(function() {
  r.table("instacat").changes().run(conn)
  .then(function(cursor) {
    cursor.each(function(err, item) {
      if (item && item.new_val)
        io.sockets.emit("cat", item.new_val);
    });
  })
  .error(function(err) {
    console.log("Error:", err);
  });

我试图只产生而不是链接承诺,但由于语法无效而引发错误。

 try {
   yield r.dbCreate(config.database.db).run();
   yield r.tableCreate('user').run();
 }
 catch (err) {
   if (err.message.indexOf("already exists") == -1)
      console.log(err.message);
 }

app.listen(port);

执行此类设置的最佳方法是什么,包括执行在 koa 中运行 .changes() 的查询,以便它仅在服务器启动时执行,而不是在每个通过的请求周期时执行。或者有没有更好的方法在 koa 中实现这一点?

【问题讨论】:

    标签: rethinkdb koa


    【解决方案1】:

    您只能在生成器函数中使用yield 关键字(签名中带有星号的函数)。通常,如果您想使用 yield 来等待 Promise 的完成,您会使用基于生成器的协程包装整个操作集。

    您可以使用两个库:

    Co 是 Koa 在其所有中间件处理程序中使用的底层工具,但我个人更喜欢 Bluebird,因为根据我的经验,它似乎有更好的错误处理能力。

    您可以将设置代码包装在 Bluebird 协程中,然后就地调用它:

    bluebird.coroutine(function *() {
      try {
        yield r.dbCreate(config.database.db).run();
        yield r.tableCreate('user').run();
      }
      catch (err) {
        if (err.message.indexOf("already exists") == -1)
          console.log(err.message);
      }
    })();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 2019-10-30
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      相关资源
      最近更新 更多