如何使用反引号在 node.js 中编写多行 MySQL 查询?

Raf*_*lla 2 javascript mysql sql node.js express

我在尝试在 node.js 应用程序中编写 MySQL 查询时遇到问题。在编写大型查询时,我需要将代码拆分为不同的行,因此我需要使用反引号来编写 JavaScript 字符串。关键是在我的 MySQL 查询中,我还需要使用反引号作为查询的一部分,如下所示:

SELECT `password` FROM `Users`
Run Code Online (Sandbox Code Playgroud)

所以在 node.js 中执行查询的代码应该是这样的:

database.query(`
  SELECT `password` 
  FROM `Users`
`);
Run Code Online (Sandbox Code Playgroud)

但代码不起作用,因为查询的反引号被解释为字符串文字的反引号。我可以像这样使用单引号或双引号连接多个字符串文字:

database.query( 
  'SELECT `password` ' +
  'FROM `Users`'
);
Run Code Online (Sandbox Code Playgroud)

但我试过了,很快就变得一团糟。我还尝试使用一种不同的方法,使用特殊字符作为反引号替换,并用这样的replaceAll()函数(受 MSSQL 启发)用反引号替换它:

`SELECT [password]
FROM [Users]`.replaceAll('[', '`').replaceAll(']', '`');
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:有没有办法在不转义查询反引号或不连接几个单引号或双引号字符串文字的情况下编写多行 MySQL 查询?

小智 5

我更喜欢在我的 MySQL 查询中不使用反引号。如果您仍然需要表名周围的引号,您可以尝试设置 ANSI_QUOTES 以允许使用"instaead :https ://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi_quotes

如果这不起作用,您可能更喜欢只转义反引号:ES6 中带有嵌套反引号(`) 的模板文字