knex:不允许运算符“ undefined”

时间:2018-10-26 16:32:36

标签: javascript node.js knex.js

im试图在从参数接收到的nodejs中使用knex,但显示消息“ TypeError:不允许运算符“ undefined”,这是我的代码的一部分,并且控制台退出了

async retrieve(where, fields) {
    console.log(where);
    var _this = this;
    return new Promise((resolve, reject) => {
        //si no tengo where lo pongo como objeto vacio
        where = where || {};
        //si no tengo fields cojo los de defecto del schema
        if(!fields){
            fields = Object.keys(_this.schema.properties).map((key) => {
                return key;
            });
        }
        //selecciono
        console.log('este es el where justo antes de knex', where);
        _this.connection(_this.table)
        .where(where)
        .select(fields)
        .then((rows) => {
            resolve(rows);
        })
        .catch((error) => {
            console.log(error);
            reject(GlobalMessages.db.dbError);
        });
    });
}

knex function

enter image description here

3 个答案:

答案 0 :(得分:0)

这是您的代码的简化版本:

async retrieve(whereClause, fields) {
  whereClause = whereClause || {};
  fields = fields || Object.keys(this.schema.properties);

  try {
    return await this.connection(this.table).where(whereClause).select(fields);
  } expect (error) {
    console.log(error);
    throw GlobalMessages.db.dbError;
  }
}

效果更好吗?我找不到任何明显会导致该错误的东西。它应该在查询构建期间发生,但是从此测试代码https://runkit.com/embed/mcb4fm8gmrhw可以看出,上面的代码可以正常工作。

也许那不是引发错误的地方?您可以添加更多调试打印,以查看执行该选择行后代码中可能还会发生什么。

答案 1 :(得分:0)

where可能实际上是字符串"{id_comercio:50}"而不是对象吗?那将解释您得到的错误。

答案 2 :(得分:0)

请检查以下内容:where = where || {};如果传递原始字符串而不是对象,则会遇到相同的错误。