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

在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);
    }
});

});

阅读 6.3k
2 个回答
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对异步函数进行封装

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题