node.js - 使用 Sequelize 和 Node 延迟加载静态数据

标签 node.js caching asynchronous synchronous sequelize.js

我想缓存存储在一些变化不大的 MySQL 表中的数据。讨论的示例包括国家/地区代码、语言代码等,但我还有其他特定于应用程序的数据。这本身并不难。我认为,让这件事变得困难的是,我有两个约束,这两个约束在 Node、Sequelize 和 Express 的世界中看起来几乎是矛盾的:

  1. 我希望可以通过“内联”函数访问数据,我将在 JavaScript 表达式和语句中广泛使用这些函数。例如,我希望能够使用像 Country.nameFromCode(code) 这样的类方法来连接字符串。据推测,这意味着这些方法是同步的。对于这种看似简单的请求/要求,回调和 promise 似乎是一个真正的解决方法。

  2. 我想要延迟加载数据。我可以在启动时轻松地在 express-generator 的典型 bin/www 脚本中加载数据。 。但在这里,我的延迟加载数据的请求似乎是合理的。据推测, .nameFromCode 函数应该只在第一次访问数据库时加载数据,然后缓存数据。

那么:我应该使用像 deasync 这样的模块吗? , sync ,或synchronize我第一次接到 .nameFromCode 电话时?我一定要吗?看来应该有一个更简单的答案。

Sequelize 或 mysql 驱动程序是否有同步 .query 或 .find 方法?如果是这样,这可能是更好的方法吗?

我应该放弃同步吗? :) 我知道异步是 Node 等的口头禅,但对于这种情况来说,这似乎是一个沉重的代价。

除了上面链接的模块之外,这里还有一些似乎相关的引用:

谢谢。

最佳答案

Does Sequelize or the mysql driver have a synchronous .query or .find method?

不幸的是,据我所知没有。 Node 始终是异步 I/O,fs 除外。模块,处理两者。

should I use a module such as deasync, sync, or synchronize the first time I get the .nameFromCode call? Do I have to? It seems like there should be an easier answer.
[...]
Should I give up on synchronous anything? [...] it seems like a burdensome price to pay for situations like this.

您可以选择使用 async/await ,截至 2016 年 1 月,ECMAScript 规范中的第 3 阶段提案。
基本上:

  • 任何返回 Promise 的函数都可以被 await 处理
  • 任何在其他函数上等待的函数都应使用async关键字进行标记
  • async 函数将隐式返回 Promise

您的代码仍将是异步的。但它几乎看起来像同步代码。太棒了!

你可以实现这样的东西:

async function claimThatYouAreInCountry ( code ) {
  var country = await Country.nameFromCode( code );
  console.log( "I'm in " + country.name );
}

Babel playground中的另一个例子(检查输出/控制台!)

我的建议是使用Babel's require hook ,因此应用程序中的一切都变得透明,并且您不需要构建步骤。

关于node.js - 使用 Sequelize 和 Node 延迟加载静态数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27892899/

相关文章:

node.js - Protractor 不被识别为内部或外部命令、可操作程序或批处理文件

javascript - 如何以编程方式清空浏览器缓存?

performance - HTTP 缓存、浏览器差异

javascript - 异步下载几个js脚本,然后按顺序执行

asp.net - 在 ASP.NET MVC 中处理异步请求

javascript - Nodejs 中异步函数的返回值

javascript - NodeJs : external javascript with dependencies

ios - 在 IOS SWIFT 中缓存最后一个覆盖对象的最佳方法是什么。

javascript - 使多回调与 jQuery $.when 同步

javascript - 清理这些 if 语句的最佳方法是什么?