如何使用es6的模板字符串编写以下查询?
connection.query('\
CREATE TABLE `' + dbconfig.database + '`.`' + dbconfig.users_table + '` ( \
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, \
`username` VARCHAR(20) NOT NULL, \
`password` CHAR(60) NOT NULL, \
PRIMARY KEY (`id`), \
UNIQUE INDEX `id_UNIQUE` (`id` ASC), \
UNIQUE INDEX `username_UNIQUE` (`username` ASC) \
)');
还有其他更好的方法来编写多行sql查询吗?
答案 0 :(得分:6)
在ES6中,您可以使用template literals,因为它们可以是多行的。
connection.query(`CREATE TABLE ${dbconfig.database}.${dbconfig.users_table} (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
password CHAR(60) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX id_UNIQUE (id ASC),
UNIQUE INDEX username_UNIQUE (username ASC)
)`);
答案 1 :(得分:1)
即使模板字符串按预期工作,但我仍然很难读取,验证和格式化其中的SQL查询。
我更喜欢具有实用程序功能,该功能可以在应用程序启动时从文件中将查询作为字符串加载。
这是此实用程序功能的TypeScript示例:
import {existsSync, readFileSync} from 'fs'
export const loadQuery = (queryFileName: string) => {
const path = `src/queries/${queryFileName}.sql`
if (!existsSync(path)) {
process.exit(1)
}
return readFileSync(path, 'utf8')
}
现在,我有一个SQL文件,可以使用方便的任何工具对其进行自动格式化:
SELECT
article.title,
article.description,
article.created_by,
article.company_id
FROM articles article
INNER JOIN users usr ON
usr.company_id = article.company_id AND
usr.email = $1
ORDER BY article.title;
在WebStorm中使用SQL格式化插件安装的方式如下:
最后,我这样称呼(Koa / Express端点示例):
import {dbClient} from '../dbClient'
import {loadQuery} from './loadQuery'
const getUserCompanyArticlesQuery = loadQuery('getUserCompanyArticles')
export const getUserCompanyArticles = async (email: string) => {
const result = await dbClient.query(
getUserCompanyArticlesQuery,
[email])
return result.rows
}
优点:
缺点: