为了账号安全,请及时绑定邮箱和手机立即绑定

koa中ctx.body写在query回调中无法返回数据给前台

koa中ctx.body写在query回调中无法返回数据给前台

野生安乃近 2017-01-18 11:56:07
在koa中,用了MySQL 数据库,前台用 ajax POST 请求数据库数据时,若将 ctx.body表达式写在 query 表达式中用以返回查询的数据给前台,会报 404 错误。下图写法若将 ctx.body 写在query 查询方法外,则正常,但是无法获取到数据库查询的数据。 这是怎么回事啊?? 该怎么解决,既不报404又能将查询到的数据返回给前台ajax。下图写法
查看完整描述

5 回答

?
samuel_sx

TA贡献1条经验 获得超2个赞

1、在请求体外部声明一个变量接收查询语句返回值。

2、使用await new Promise把整个请求体包裹。

3、在回调方法中将查询到的返回值赋给提前声明好的变量,之后执行Promise的resolve方法。

之后就可以在请求体外部调用变量来获取从sql中查询到的数据。避免ctx.body在异步函数中会出现404的尴尬情况

查看完整回答
2 反对 回复 2019-01-01
  • 斯塔地up
    斯塔地up
    你好,我想请教一下,我知道这样处理,但是不知道为什么这样处理,为什么ctx.body写在回调中就会404呢
?
wblovezqy

TA贡献14条经验 获得超4个赞

如果我是你,我会在if(!err)后加一个else,在else中输出试试,你这个代码,如果sql出错了就没有输出了,只有正确才输出

查看完整回答
1 反对 回复 2017-01-22
?
陈建芳

TA贡献1条经验 获得超0个赞

我也遇到了,请问解决了吗

查看完整回答
反对 回复 2017-06-30
?
LB0

TA贡献1条经验 获得超0个赞

//试试这样写

var res = await connection.query(巴拉巴拉巴拉).catch( err => {
    console.log(error)
)}
ctx.body = res.需要返回的变量

感觉错误应该是 你既然用了await 就不会触发 connection.query的回调函数

//以上全是猜的,错了勿喷!


查看完整回答
反对 回复 2017-08-09
  • 5 回答
  • 1 关注
  • 5341 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信