在nodejs中编写SQL查询

时间:2014-10-29 10:35:07

标签: mysql node.js

这个问题主要是关于在nodejs中编写查询的最佳实践。我们已经推荐了几个教程,但未能得出结论。

我们有一个节点js API层,主要用于读写数据库。以下是示例代码:

pool.query("update node SET changed = " + params.updationTime + " where nid = " + params.nid);
pool.query("update node_revision SET timestamp = " + params.updationTime +" where nid = " + params.nid);
pool.end();

这是编写代码的正确方法,还是应该以异步格式编写sql查询。

3 个答案:

答案 0 :(得分:0)

如果您的池配置允许多个连接,则可能两个查询并行执行。通话类型本身无关紧要。此示例需要2秒钟才能完成:

 connection.query('select sleep(1)');
 connection.query('select sleep(1)', function() { console.log('done!') });

以及这一个:

 connection.query('select sleep(1)', function() {
   connection.query('select sleep(1)', function() { 
     console.log('done!') 
   });
  });

因为mysql协议本身是"顺序" (即,只有在完全接收到之前的结果后,才允许客户端发送下一个查询)。大多数异步客户端通过在内部排队命令来隐藏此限制。如果有两个连接,查询实际上是并行的:

 connection1.query('select sleep(1)', function() { console.log('done1') });
 connection2.query('select sleep(1)', function() { console.log('done2') });

" DONE1"和"完成2"两者都将在大约1秒内出现在屏幕上

pool.querypool.getConnection() + connection.query() + connection.release()的shorlcut - 请参阅readme

答案 1 :(得分:0)

在NodeJS中编写SQL查询时,我无法提升Knex.js

  • 以编程方式构建动态查询。(编写动态原始SQL字符串是一个非常手动的过程)
  • 连接池。
  • 交易支持。
  • 字符串转义。
  • 然后继续。

对于您的具体问题,您只需进行查询并执行它们(使用回调或Promises),Knex连接池将处理所有池,并且通常情况下只适合您。

你会喜欢它,试一试:)

答案 2 :(得分:0)

我建议你使用sails.js(http://sailsjs.org/#/)框架,它使用水线查询语言(http://sailsjs.org/#/documentation/concepts/ORM/Querylanguage.html)从mySQL / mongodb / Redis数据库中检索数据。