我写了一个微服务,它正在对SQL数据库进行外部调用。我有一个js文件,专门用于形成一个字符串的这些可怕的查询..
let data_example = 'SELECT * \
WHERE BLAH = BLAH AND \
....';
它几乎没有人类可读,看起来很糟糕。存储/组织或处理需要在Node中存储和调用的长SQL查询字符串的最佳方法是什么?
答案 0 :(得分:5)
你有几个选择。
您可以将它们存储在程序启动时读取的文件中,这样您就可以在一个了解SQL的工具中创建它们,甚至可以连接到您的数据库为您自动完成一些事情,可以帮助您格式化,进行语法突出显示等。
您可以使用ES2015(" ES6")template strings(也称为"模板文字"):
let data_example = `
SELECT *
WHERE BLAH = BLAH AND ...
`;
模板字符串可以跨越行(请注意,换行符和后续行开头的空格 是字符串的一部分。)
请确保您不使用模板字符串的功能通过(隐藏)字符串连接填充参数,因为That Would Be Wrong™。 :-)就是说,就像你不会这样做:
// We know NOT to do this
example = "WHERE SomeColumn = '" + userInputValue + "'";
不要使用模板字符串的隐藏字符串连接执行相同的操作:
// We also know NOT to do this
example = `WHERE SomeColumn = ${userInputValue};`
....这是你如何使用模板字符串进行字符串连接。如果您习惯使用模板字符串,那么错误地执行该操作将非常容易,并且具有SQL注入向量。
两种选择都可能有用例。