koa中查询mysql数据,ctx.body 写在query回调中无法返回数据到前台,报404

发布于 2022-09-04 12:46:42 字数 982 浏览 25 评论 0

在koa中,用了MySQL 数据库,前台用 ajax POST 请求数据库数据时,若将 ctx.body表达式写在 query 表达式中用以返回查询的数据给前台,会报 404 错误。下图写法
图片描述

图片描述

若将 ctx.body 写在query 查询方法外,则正常,但是无法获取到数据库查询的数据。 这是怎么回事啊?? 该怎么解决,既不报404又能将查询到的数据返回给前台ajax。下图写法
图片描述

图片描述

代码:
router.post('/query', async function(ctx, next) {

ctx.body = 'ok';
await connection.query('SELECT * FROM `notes` WHERE `title` = ?', ['434'],
    function(err, rows, fields) {
    if (!err) {
        console.log(rows);
    }
});

});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寄人书 2022-09-11 12:46:42
router.post('/query', async (ctx, next) => {
  let data;
  try {
    data = await connection.query('SELECT * FROM `notes` WHERE `title` = ?', ['434']);
  } catch (err) {
    ctx.body = { message: err.message };
    ctx.status = err.status || 500;
  }
  ctx.body = 'ok';
});

connection.query需要用promise封装下
如何封装可以参考这篇文:Node.js用ES6原生Promise对异步函数进行封装

木緿 2022-09-11 12:46:42

不要写在里面,像楼上一样,先let data,然后在function里面把结果赋给data,再在外面ctx.body

我也困扰了很久,express是你这种写法可以

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文