tayili 2023-12-14 14:00 采纳率: 0%
浏览 5
已结题

关于#ctx.body#的问题,如何解决?(关键词-catch)


router.post('/uploadFile', async (ctx, next) => {

  const uploadFile = () => {

    const form = new formidable.IncomingForm();
    form.uploadDir = __dirname + '/../public/documents/'
    form.keepExtensions = true;
    form.multiples = true;

    return new Promise((resolve, reject) => {
  
      form.parse(ctx.req, (err, fields, files) => {
        if (err) {
          reject({ code: 200, err: err });
          return;
        }
        let time = new Date().getTime();
        let fileName = files.file[0].originalFilename;
        let newFileName = time + '_' + fileName;
        let newPath = form.uploadDir + newFileName;
  
        fs.renameSync(files.file[0].filepath, newPath); //重命名
  
        let res = {};
        res.newFileName = newFileName;
        res.originalFileName = fileName;
  
        resolve({ code: 200, data: res })

        return ;
      })

    })
  }


  try {
    const result = await uploadFile();
    ctx.body = result; //为什么不能将result 赋值为ctx.body
  } catch (error) {
    ctx.status = 500;
    ctx.body = { error: 'Error' };
  }

})

ctx.body 返回404 返回ctx.body 失效

  • 写回答

1条回答 默认 最新

  • 爱编程的鱼 2023-12-14 14:01
    关注

    如果您在将result赋值给ctx.body后发现返回的状态码是404,并且ctx.body的内容无效,可能有以下几个原因导致:

    路由问题:请确保您的路由定义正确,并且请求能够正确匹配到该路由。如果路由不正确,可能会导致请求返回404。

    中间件顺序:请检查中间件的顺序是否正确。中间件的执行顺序对于正确处理请求非常重要。确保在处理该请求的中间件之前没有其他中间件干扰了ctx.body的赋值。

    错误处理:如果在try块中的uploadFile()函数抛出了错误,但是没有正确地被catch块捕获,那么可能会导致未处理的错误最终返回404。请确保uploadFile()函数中的错误能够被正确捕获并处理,以避免返回错误的状态码。

    其他中间件或代码的干扰:检查其他中间件或代码是否在处理请求时修改了ctx.body的值。可能有其他中间件或代码在处理请求之前或之后修改了ctx.body的值,导致您的赋值操作被覆盖。

    请逐一检查这些可能的原因,并逐步排除问题,以确定导致ctx.body返回404且内容无效的具体原因。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月14日
  • 创建了问题 12月14日