我是靠谱客的博主 尊敬手机,最近开发中收集的这篇文章主要介绍koa中间件异步操作使用fs.readFile正常运行后,前端收到404错误,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

场景

  • 在使用koa2编写接口时,在中间件中使用了fs.readFile函数,在它的回调中进行了ctx的返回设置,但是前端获取该接口返回却是404(已确定接口逻辑没有错误且正确执行了)

  • 代码:

  • router.get('/:folder/:date/:file', async ctx => {
    const { folder, date, file } = ctx.params;
    const path = `static/${folder}/${date}/${file}`;
    await fs.readFile(path,function(err,data) => {
    if(err) {
    ctx.status = 404;
    ctx.body = {
    data: {
    msg: '文件不存在'
    },
    code: 404
    };
    } else {
    console.log(111); // 打印调试
    ctx.status = 200;
    console.log(ctx.status); // 打印调试
    ctx.body = {
    data: {
    article: data.toString(),
    msg: '查询成功'
    },
    code: 200
    };
    }
    })
    });
    
  • 描述:请求接口后,上述程序的打印结果是111404

  • 思考:上网查询别人返回404的问题基本都是中间件含异步操作但没有使用async/await处理,与我的问题无关

  • 解决:

    • 方法一:将fs.readFile改为同步读取fs.readFileSync

    • const data = fs.readFileSync(path)
      if(!data) {
      console.log(111); // 打印调试
      ctx.status = 200;
      console.log(ctx.status); // 打印调试
      ctx.body = {
      data: {
      article: data.toString(),
      msg: '查询成功'
      },
      code: 200
      };
      } else {
      ctx.status = 404;
      ctx.body = {
      data: {
      msg: '文件不存在'
      },
      code: 404
      };
      }
      
    • 方法二:用Promise封装fs.readFile函数

    • // 封装
      function pReadFile (path) {
      return new Promise(function (resolve, reject) {
      fs.readFile(path, function (err, data) {
      if (err) {
      reject(err);
      } else {
      resolve(data);
      }
      });
      });
      }
      // 使用
      await pReadFile(path).then(data => {
      ctx.status = 200;
      ctx.body = {
      data: {
      article: data.toString(),
      msg: '查询成功'
      },
      code: 200
      };
      }).catch(err => {
      ctx.status = 404;
      ctx.body = {
      data: {
      msg: '文件不存在'
      },
      code: 404
      };
      });
      
    • 总结:查询资料发现koa的中间件对异步操作好像是返回一个Promise对象处理的,而原生的fs.readFile并不返回一个Promise对象,将其用Promise封装后就可正常运行

最后

以上就是尊敬手机为你收集整理的koa中间件异步操作使用fs.readFile正常运行后,前端收到404错误的全部内容,希望文章能够帮你解决koa中间件异步操作使用fs.readFile正常运行后,前端收到404错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部