首页 > 解决方案 > Knex 有时会返回一个空字符串

问题描述

我在 MYSQL 中使用 knex。我有一个函数,我调用它来向用户显示数据,另外我正在使用一个视图表,它上面有 5 个右连接,我认为从表中返回值需要一些时间,而且我添加了 WHERE 条件在我的膝盖上,它看起来像这样:

var showClass = (teacherId , ClassId){
return new Promise((resolve , reject)=>{

        knex.select().from('v_cardex_details').where({teacherId }).andWhere({id : ClassId}).then(classes =>{
            
            resolve(classes)   
            
        }).catch(err=>{
            console.error(`Show Teacher class Error: ${err}`)
            reject (err)
        })
    })
}

我调用这个通用函数来响应一些类似这样的请求

exports.EditClass = (req,res)=>{
 knex('Table').update({//Some update stuff here}).then(()=>{
  showClass(req.user.id, req.params.id).then(data=>{
   return res.status(200).json({data , message:''})
})
}).catch()
}

使用相同的输入,更新后的这个函数返回值,有时它返回一个空字符串,特别是当它在托管服务器上的大部分时间它只返回{ message : '' }

标签: mysqlnode.jsexpressknex.js

解决方案


尝试通过删除所有不必要的包装器来创建简化代码,您可能会发现问题出在哪里。AFAIK 不可能{data , message:''}创建一个只包含{message: ''}没有任何附加属性的对象。

> var data = []
undefined
> {data, foo:1}
{ data: [], foo: 1 }
> data = undefined
undefined
> {data, foo:1}
{ data: undefined, foo: 1 }
> {data1, foo:1}
ReferenceError: data1 is not defined

您共享的代码中不存在您遇到的问题(尽管存在语法错误和其他问题)。

编辑:

res.json()用于JSON.stringify()将 js 对象转换为 JSON 字符串。因此,如果data您的代码中的值是undefined而不是数组,则可以解释您遇到的行为:

λ node
> JSON.stringify({ test: undefined })
'{}'

如您所见JSON.stringify(),省略了undefined输出 JSON 字符串中带有值的属性。


推荐阅读