我可以将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加载文件。 并在运行时使用对象。