Могу ли я хранить инструкции 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', { ... });
})

}); 

P. S. Я не хочу хранить SQL-операторы в .js файл.

Заранее благодарю вас

2 2

2 ответа:

Вы, конечно, можете это сделать, но помните, что работа с файлами стоит "слишком много времени". То, что вам, вероятно, нужно, - это слой, который делает эти запросы.

Например, вы можете сделать что-то вроде:

  myDBLayer.getNumber(function(id, country, name){
    //Do stuff
  });
Но вы должны определить функцию getNumber и выполнить функцию для каждого запроса, который вы хотите. Конечно, вы можете получать параметры и быть своего рода абстрактным с этим, но я думаю, что это более эффективно, что просто читать какой-то файл со всеми запросами.

Вы, конечно, можете это сделать, но помните, что работа с файлами тоже стоит". много времени "

Я не согласен с Gepser. Содержимое файла должно загружаться один раз при запуске сервера и храниться в оперативной памяти (я имею в виду объект) во время выполнения.

Я бы разделил запросы на некоторые логические модули, а затем на таблицы или, по крайней мере, просто таблицы:

Файл 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 при инициализации приложения. И использовать объект во время выполнения.