我可以将SQL语句存储在节点js中的单独文件中吗?

时间:2015-03-16 16:46:39

标签: node.js express node-mysql

我想将所有SQL语句存储在单独的(.txt可能?)文件中。这将使我的代码看起来干净,更具可读性。

示例:

router.get('/', function (req, res, next) {

var sql = // get SQL from a file

connection.query(sql, function (err, rows, fields) {
    var row;

    if (!err) {
        row = rows[0];
    }

    res.render('index', { ... });
})

}); 

P.S。我不想将SQL语句存储在.js文件中。

提前谢谢

2 个答案:

答案 0 :(得分:1)

你肯定可以做到这一点,但要记住,使用文件需要花费太多时间"。您可能需要的是执行该查询的图层。

例如,您可以执行以下操作:

  myDBLayer.getNumber(function(id, country, name){
    //Do stuff
  });

但是你必须定义getNumber函数并为你想要的每个查询执行一个函数。当然,您可以接收参数并使用它作为一种抽象,但我认为只需阅读一些带有所有查询的文件就更有效。

答案 1 :(得分:0)

  

你肯定可以做到这一点,但要记住,使用文件的成本“也是如此”   很多时间“

我不同意Gepser。文件内容应该在服务器启动时加载一次,并在运行时存储在ram(对象我的意思)中。

我会将查询分成几个逻辑模块,然后分成表或至少只是表:

json文件

{
  "usersTable": {
    "selectAll": "select * from user",
    "selectSome": "select * from users where id > :id",
    "insert": "insert into users values (:name, :second_name, )"
  },
  "messagesTable": {
    "selectAll": ""
  }
}

键值文件

usersTable.selectAll=select * from user
userTable.selectSome=select * from users where id > :id
userTable.insert=insert into users values (:name, :second_name, )

messagesTable.selectAll=
  • 如果项目很大,你不想存储每一个查询 一个文件。至少采用键值方法。按包含模块名称的目录分隔文件。
  • 使用命名参数而不是位置。否则,当您没有看到查询时,参数是多么模糊。
  • 在应用程序初始化时使用sqls加载文件。并在运行时使用对象。