Nuxt.js采坑

1. operation not permitted

参考链接:EPERM: operation not permitted’ error when building Nuxt app

百度了一波,首先是关于这个问题的文章比较少,都试了一遍, 用管理者权限运行win+x也不行, 最后是关掉了vscode, 关掉了控制台, 重新打开,项目就可以起起来了, 如果你试了还是不行, 可以尝试上面链接中的其他

2. 请求的数据图片403

参考链接: 访问图片出现403的解决办法

请求回来的数据, 图片在浏览器端报403无法展示, 但是图片的链接在浏览器中可以打开, 在浏览器中打开之后的图片, 页面可以正常展示.

403(防止盗链)

  • 使用images.weserv.nl方案,把现在的图片连接传进来,返回一个不受限制的路径
  • 使用no-referrer方案,在前端页面头部添加一个meta
	<meta name="referrer" content="no-referrer" />

由于nuxt项目中没有html的文件(可以在nuxt.config.js中设置头部内容,但是效果不咋滴,会有几个图片404), 我参考了上文中的第一种方式, 给了一个过滤器

  filters: {
    urlFormat(url) {
      return url.replace(
        /^(http)[s]*(\:\/\/)/,
        "https://images.weserv.nl/?url="
      );
    }
  }

如果是gif的图片, 建议使用第二种方案哦~

3. 在asyncData中请求多个接口(大于等于两个)

在这里插入图片描述
场景是, 在一个电影列表的demo中, 当点击列表中某一个电影时会跳转到列表详情,但是详情中需要展示的数据分散在两个接口中,一开始我是在另外一个接口的回调中调了另外一个接口, 后来是用了await等待接口完成之后调另外一个, 总之就是点击之后报了上图的警告并且不展示详情

正确的打开方式:

  async asyncData(context) {
    try {
      let [res, backData] = await Promise.all([
        axios.get(`/${context.params.type}/${context.params.id}`),
        axios.get(`/details`)
      ]);
      backData.data.forEach(info => {
        if (info[`${context.params.type}Id`] == context.params.id) {
          for (var key in info) {
            res.data[key] = info[key];
          }
        }
      });
      return {
        detail: res.data
      };
    } catch (error) {
      context.error({ statusCode: 404, message: "页面未找到或无数据" });
    }
  }
  1. error的属性在context这个参数中

这里有一个坑,asyncData的callback在nuxt.js的2.3.X版本给废弃了,运行项目总是提示:

Callback-based asyncData, fetch or middleware calls are deprecated. Please switch to promises or async/await syntax

经过google发现的,nuxt.js的作者觉得callback没什么用,给去掉了

参考链接:nuxt.js写项目时增加错误提示页面

  1. 返回的数据作为一个对象return回去, 和之前callback中的形式一样
  2. 如果一次发送多个请求, 用Promise.all([axios1, axios2,...])

参考链接: Nuxt.js asyncData 多请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值