我可以将SQL语句存储在节点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', { ... }); }) }); 

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

先谢谢你

你当然可以做到这一点,但请记住,与文件的工作花费“太多的时间”。 你可能需要的是做这个查询的图层。

例如,你可以做一些事情:

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

但是你必须定义getNumber函数,并为每个你想要的查询做一个函数。 当然,你可以接收参数,并作为一种抽象的,但我认为这是更有效的,只是阅读一些文件与所有查询。

你当然可以做到这一点,但要记住,与文件工作花费“太多的时间”

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

我会分开查询到一些逻辑模块,然后到表或至less只是表:

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= 
  • 如果项目很大,你不想把每一个查询存储在一个文件中。 至less采用键值方法。 用包含模块名称的目录分隔文件。
  • 使用命名参数,而不是位置。 否则,当你没有看到查询时,这个参数是模棱两可的。
  • 在应用程序初始化时使用sqls加载文件。 并在运行时使用对象。