【问题标题】:Knex sometime return an empty stringKnex 有时会返回一个空字符串
【发布时间】:2023-03-18 10:51:01
【问题描述】:

我在 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 : '' }

【问题讨论】:

    标签: mysql node.js express knex.js


    【解决方案1】:

    尝试通过删除所有不必要的包装器来创建简化代码,您可能会发现问题出在哪里。 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() 在输出 JSON 字符串中省略了值为 undefined 的属性。

    【讨论】:

    • 在 ES6 中我只使用了同名的对象键和对象值然后不需要像{data : data} 那样重复这个,你可以调用{data}
    • 请再次仔细阅读答案,您应该会看到我确实在所有地方都使用了该语法。
    • 还添加了可能的解释那里可能发生的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2013-10-22
    • 2019-10-29
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多