如何组织用 Javascript/Node 编写的长 SQL 语句

How to organize a long SQL statement written in Javascript/Node

我编写了一个对 SQL 数据库进行外部调用的微服务。我有一个 js 文件,专门用于这些看起来很糟糕的字符串形式的查询..

let data_example = 'SELECT * \
WHERE BLAH = BLAH AND \
....';

它几乎没有人类可读性,而且看起来很糟糕。 store/organize 或处理需要在 Node 中存储和调用的长 SQL 查询字符串的最佳方法是什么?

你有几个选择。

  1. 您可以将它们存储在您在程序启动时读取的文件中,这样您就可以在理解 SQL 的工具中编写它们,也许甚至可以连接到您的数据库以自动-帮你完成,可以帮你排版,语法高亮等等

  2. 可以使用ES2015("ES6")template strings(也叫"template literals"):

    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 注入向量。

这两个选项可能都有用例。