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

Can I store SQL statements in a separate file in node js?

我想将所有 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 文件中。

提前致谢

您当然可以做到,但请记住,使用文件会花费 "too much time"。您可能需要的是执行该查询的层。

例如,您可以这样做:

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

但是你必须定义getNumber函数并且为你想要的每个查询做一个函数。当然,您可以接收参数并将其抽象化,但我认为只读取包含所有查询的文件会更有效。

You surely can do that but remember that work with files cost "too much time"

我不同意 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 加载文件。并在运行时使用对象。