mysql - 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 : '' }
解决方案
尝试通过删除所有不必要的包装器来创建简化代码,您可能会发现问题出在哪里。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 字符串中带有值的属性。
推荐阅读
- github - 如何将我当前的 Github 备用电子邮件设置为我的主电子邮件,反之亦然?
- sorting - 弹性搜索排序提升
- flutter - Google 分析不提供非字符串自定义事件参数(自定义定义)
- javascript - 获取 Google Sheets API v4 收到 401
- android - 如何将按钮放在我的意愿位置?- 颤振
- visual-studio-code - 有没有办法从单独的进程向 VSCode 发送命令?
- twitter-bootstrap - bootstrap3 typeahead keydown , keyup 使所选项目消失
- go - 如何使用 Golang Colly 登录亚马逊
- asp.net - Google OAuth 2.0 得到错误 400:redirect_uri_mismatch,ASP.net core 3.1
- python - 如何从 POST 方法中获取 str 并将其保存在数据库中并在 django 中返回带有 str 的消息?