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);
});
});
}
答案 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 || {};
如果传递原始字符串而不是对象,则会遇到相同的错误。