存储在变量中的字符串的字符串插值
String interpolation of a string stored in a variable
我正尝试在 JavaScript 中使用动态 'WHERE' 条件为 Amazon Athena 准备一些 SQL 查询。查询保存在另一个文件中的一个变量上。如何为其添加自定义 WHERE 条件?
我正在尝试实现的伪代码,
file1.js
module.exports.queryFromFile1 = 'SELECT * Name FROM Contact WHERE Name = ?';
file2.js
const {queryFromFile1} = require('./file1.js');
const newQuery = queryFromFile1,['Jane'];
console.log(newQuery); // 'SELECT * Name FROM Contact WHERE Name = 'Jane'
任何人都可以向我建议一个正确的方法来做到这一点。我当前的解决方案发布在下面。
file1.js
module.exports.queryFromFile1 = 'SELECT * Name FROM Contact WHERE Name = {stringToReplace}';
file2.js
const {queryFromFile1} = require('./file1.js');
const newQuery = queryFromFile1.replace("{stringToReplace}", "'Jane");
console.log(newQuery); // 'SELECT * Name FROM Contact WHERE Name = 'Jane'
如评论中所述,您不应使用原始字符串处理 SQL 语句。
但是,对于代码的非安全关键部分(例如,从组件属性中获取日期格式字符串),我更喜欢这样做:
const stringProducer = (insert) => `This was inserted: ${insert}`;
然后像这样使用:
const string = stringProducer("foo");
我使用了一个小辅助函数,让你可以使用直接的 es6 字符串插值来绕过:
const template= (template, ctx) => {
const script = new vm.Script('`' + template + '`')
return script.runInNewContext(ctx)
}
const results = template('hello ${foo}', {foo:'jane'})
但是,如果您只需要做一个简单的插值,为什么不直接将 sql 作为函数导出呢?
const queryFromFile1 = str => (`SELECT * Name FROM Contact WHERE Name = ${str}`)
const query = queryFromFile1('Jane')
我正尝试在 JavaScript 中使用动态 'WHERE' 条件为 Amazon Athena 准备一些 SQL 查询。查询保存在另一个文件中的一个变量上。如何为其添加自定义 WHERE 条件?
我正在尝试实现的伪代码,
file1.js
module.exports.queryFromFile1 = 'SELECT * Name FROM Contact WHERE Name = ?';
file2.js
const {queryFromFile1} = require('./file1.js');
const newQuery = queryFromFile1,['Jane'];
console.log(newQuery); // 'SELECT * Name FROM Contact WHERE Name = 'Jane'
任何人都可以向我建议一个正确的方法来做到这一点。我当前的解决方案发布在下面。
file1.js
module.exports.queryFromFile1 = 'SELECT * Name FROM Contact WHERE Name = {stringToReplace}';
file2.js
const {queryFromFile1} = require('./file1.js');
const newQuery = queryFromFile1.replace("{stringToReplace}", "'Jane");
console.log(newQuery); // 'SELECT * Name FROM Contact WHERE Name = 'Jane'
如评论中所述,您不应使用原始字符串处理 SQL 语句。
但是,对于代码的非安全关键部分(例如,从组件属性中获取日期格式字符串),我更喜欢这样做:
const stringProducer = (insert) => `This was inserted: ${insert}`;
然后像这样使用:
const string = stringProducer("foo");
我使用了一个小辅助函数,让你可以使用直接的 es6 字符串插值来绕过:
const template= (template, ctx) => {
const script = new vm.Script('`' + template + '`')
return script.runInNewContext(ctx)
}
const results = template('hello ${foo}', {foo:'jane'})
但是,如果您只需要做一个简单的插值,为什么不直接将 sql 作为函数导出呢?
const queryFromFile1 = str => (`SELECT * Name FROM Contact WHERE Name = ${str}`)
const query = queryFromFile1('Jane')