Sequelize:如何以编程方式计算where子句

时间:2018-05-09 10:18:03

标签: javascript sequelize.js

我正在使用sequelize版本4.37.6和sqlite3。

我正在构建一个查询接口,它为我提供了查询,然后我将解析这些查询以提供与sequ​​elize兼容的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

0 个答案:

没有答案