我正在使用sequelize版本4.37.6和sqlite3。
我正在构建一个查询接口,它为我提供了查询,然后我将解析这些查询以提供与sequelize兼容的where
子句。
作为一个简单的例子,我有这个where子句:
{ country: { [Op.eq]: 'Germany' } }
(Op.eq
只是一个例子,但我需要其他人,所以只是{ country: 'Germany'}
不是一个选项。
从语法上讲这是正确的,但问题是我的解析器将其作为字符串返回,而sequelize期望一个对象。如果我将where
字符串直接复制并粘贴到查询程序中,查询一切正常。它们看起来与字符串完全相同,但它们显然作为对象粘贴到编辑器中(VS Code)。
由于JSON.parse()
符号,[Op.eq]
无效。我曾尝试使用$eq
,但我没有设法让它工作(并且它不再是推荐的方式)。
以下是代码的相关部分:
function parseTerm (term) {
const attributeList = ['country', 'province', 'city', 'location', 'label', 'rating', 'category', 'genre']
const operatorList = ['==', '>=', '<=', '!=', 'like', 'in']
var attribute = term.split(' ')[0].substr(1)
var operator = term.split(' ')[1]
var value = ''
if (attributeList.includes(attribute) && operatorList.includes(operator)) {
value = term.substr(attribute.length + operator.length + 3).slice(0, -1)
var sequelizeOpr = [Op.eq]
console.log(sequelizeOpr)
if (operator === '==') {
sequelizeOpr = '[Op.eq]'
}
let returnString = `${attribute}: { ${sequelizeOpr}: '${value}' }`
我知道我必须以某种方式生成一个Object,但我不知道如何动态替换值..... 有什么建议??
JD