存储在变量中的字符串的字符串插值

我正在尝试使用 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'
wenhaoyu123 回答:存储在变量中的字符串的字符串插值

正如评论中提到的,您不应该使用原始字符串处理 SQL 语句。

但是,对于代码的非安全关键部分(例如,从组件 props 中获取日期格式字符串),我更喜欢这样做:

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')
本文链接:https://www.f2er.com/2566.html

大家都在问