Nuxt2.x Error页面返回自定义请求状态码

一、问题描述

最近接到一个需求,针对Nuxt2.x的一个项目进行SEO优化,需要对404页面的状态进行修改,将404页面的请求状态码改为301,而不是404:

在这里插入图片描述

二、解决方案

1.几种无效尝试

(1)layouts下的error.vue文件中使用asyncData重设statusCode:

刚开始的思路是直接在layouts下的error.vue文件中进行设置:

  // 设置状态码为301
  async asyncData({ res }) {
    res.statusCode = 301;
  }

关于asyncDataAPI的介绍可以查看官网文档的介绍:

在这里插入图片描述
其中content如下:

在这里插入图片描述

但实际上,上述的做法这是无效的。因为asyncDatalayouts下的error.vue中并不会执行,可以看一下官方文档的这段描述:

asyncData. This hook can only be placed on page components. Unlike fetch, this hook does not display a loading placeholder during client-side rendering: instead, this hook blocks route navigation until it is resolved, displaying a page error if it fails.

(2)使用middleware

// middleware\setStatusCode.js

export default function (context) {
  // 当访问的路由不存在时,context.res.statusCode此时也为200,也无法像下面那样使用context.error判断
  // if (context.error && context.error.statusCode === 404) {
  //   context.res.statusCode = 301;
  // }

  const routeName = context.route.name;
  const isPageExist = context.app.router.options.routes.some(route => route.name === routeName);
  if (isPageExist) {
    console.log(`The page ${routeName} exists`);
  } else {
    console.log(`The page ${routeName} does not exist`);
    context.res.statusCode = 301;
  }
}
// nuxt.config.js
router: {
	...,
    middleware: [ 'setStatusCode'],
    ...
}

在这里插入图片描述
这种方式如果对于正常存在的路由,是可以在middleware中进行有效的修改,但是对于不存在的路由则无效,结果返回客户端的状态码依然是404。

2.可行方案

创建pages\error.vue结合asyncData

<template>
  <div class="page-404">
    <div>
      <img src="~/assets/images/error.png" alt="页面404">
    </div>
  </div>
</template>

<script>
export default {
  // 设置状态码为301
  async asyncData({ res }) {
    res.statusCode = 301;
  }
}
</script>

注:pages\error.vue中的error不要使用动态路由命名(即以下划线_开头:_error),因为它可能会与nuxt.config.jsrouter.extendRoutes里定义的动态路由冲突,而默认情况下pages\error.vue会优先匹配(如果想知道为什么,可以查看项目根目录下.nuxt\router.js,这个看看到nuxt最终生成的routes,在里面可以看到routes数组里path: "/:error"会出现在router.extendRoutes里定义的动态路由前面。当然如果非要使用_error, 那么可以在尝试nuxt.config.jsrouter.extendRoutes里调整path: "/:error"的顺序)。

现在访问一下/error路径看看:
在这里插入图片描述

但上述这种方式只能针对一级访问路径/xxx(比如,/error)不存在的情况,如果访问的路径是多级(比如,/xxx/xxx)的时候,客户端收到的响应码依然是404:

在这里插入图片描述

因此,我们需要针对无效访问的路径进行路由匹配定义:

// nuxt.config.js

router: {
    extendRoutes (routes, resolve) {
      routes.push(
      	...,
		{
          name: 'errorPage',
          path: '*',
          component: resolve(__dirname, 'pages/error.vue')
        })
    }
}

那么现在只要访问的链接不存在,nuxt返回给客户端的状态码就是301。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/343086.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云原生全栈监控解决方案(全面详解)

【作者】JasonXu 前言 当前全球企业云化、数字化进程持续加速&#xff0c;容器、微服务等云原生技术在软件架构中快速渗透&#xff0c;IT 架构云化、复杂化持续驱动性能监控市场。企业云化、数字化持续转型&#xff0c;以及为了考虑系统的弹性、效率&#xff0c;企业软件开发中…

最强生产力|卸载并重装Anaconda3

一、Anaconda3卸载 &#xff08;一&#xff09;官方方案一&#xff08;Uninstall-Anaconda3-不能删除配置文件&#xff09; 官方推荐的方案是两种&#xff0c;一种是直接在Anaconda的安装路径下&#xff0c;双击&#xff1a; &#xff08;可以在搜索栏或者使用everything里面搜…

HTTP代理在Python网络爬虫中的应用

网络爬虫是Python中一个非常重要的应用领域&#xff0c;它能够自动抓取互联网上的信息。然而&#xff0c;在进行网络爬虫的过程中&#xff0c;我们经常会遇到一些问题&#xff0c;其中最常见的问题就是被目标网站封禁IP地址。为了解决这个问题&#xff0c;我们可以使用HTTP代理…

ruoyi框架教程

心血来潮&#xff0c;写一篇关于ruoyi【若依】框架从0-1的教程。说一下使用感受吧&#xff0c;如果有一个架构师或者老手已经把架构改造完成也能指导你如何快速上手&#xff0c;那么你在后面的增删改查系列开发起来会如鱼得水。如果没有人改造&#xff0c;也没有人教你&#xf…

Dart基础语法——变量、数据类型

前言&#xff1a;新年新气象&#xff0c;开卷吧老铁们&#xff01; 本文主要介绍 Flutter 开发中 Dart 的基本语法&#xff0c;后续会更新到如何使用 Flutter 开发 Android 与 IOS 及 使用 Flutter 如何开发 Apple Wacth 应用。 学习 Dart 语法的阶段&#xff0c;编辑器使用的是…

用友 GRP U8 UploadFile 命令执行漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现 前言 用友GRP-U8是一款功能全面、灵活度高、可定制性强的ERP软件&#xff0c;能够协助企业实现资源的高效管理&#xff0c;优化企业运营流程&#xff0c;提升整体管理水平。该产品存在任意文件上传漏洞。 声明 请勿利…

小型园区组网实例

目录 拓扑需求IP规划路由配置交换机配置NAT配置ACL配置DHCP配置配置过程&#xff1a;配置结果&#xff1a; OSPF配置链路聚合配置配置过程&#xff1a; 网络测试 拓扑 需求 企业网络信息服务平台需实现功能&#xff1a;企业网站服务器、FTP服务器、DNS服务器。企业ip分配地址段…

linux基础学习(6):压缩与解压

linux中常见的压缩格式有.zip、.tar、.gz、bz2、.tar.gz、.tar.bz2等十几种 1.zip命令 zip格式压缩包是唯一一种windows和linux可以通用的压缩包 linux系统其实不靠文件后缀来区分压缩包&#xff0c;添加后缀是为了方便使用者分辨 &#xff08;1&#xff09;压缩命令 zip …

【LeetCode-135】分发糖果(贪心)

LeetCode135.分发糖果 题目描述 老师想给孩子们分发糖果&#xff0c;有 N 个孩子站成了一条直线&#xff0c;老师会根据每个孩子的表现&#xff0c;预先给他们评分。 你需要按照以下要求&#xff0c;帮助老师给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。…

什么是ORM思想?

1. ORM概念 ORM&#xff08;Object Relational Mapping&#xff09;对象关系映射模式&#xff0c;是一种技术&#xff0c;解决了面向对象与关系型数据库存互不匹配的现象。 ORM在业务逻辑层和数据库层之间充当了桥梁的作用。 2. ORM由来 在软件开发的过程中&#xff0c;通常…

Linux系统Shell脚本 ----- 编程规范和变量详细解读

一、Shell脚本概述 1、什么是Shell Linux系统中运行的一种特殊程序在用户和内核之间充当“翻译官”用户登录Linux系统时&#xff0c;自动加载一个Shell程序Bash是Linux系统中默认使用的Shell程序 2、Shell的作用 Linux系统中的shell是一个特殊的应用程序&#xff0c;它介于操…

JVM如何找到并清理垃圾?

如何找到垃圾 若一个对象不被任何对象或变量引用&#xff0c;那么它就是垃圾&#xff0c;需要被回收。 如何找到这个垃圾呢&#xff1f; •引用计数法&#xff08;Reference Counting&#xff09; •可达性分析法&#xff08;GCRooting Tracing&#xff09; 引用计数法 在对…

浏览器无网

目录 1.运行网络诊断&#xff0c;确认原因 原因A.远程计算机或设备将不接受连接(该设备或资源(Web 代理)未设置为接受端口“7890”上的连接 原因B.DNS服务器未响应 场景A.其他的浏览器可以打开网页&#xff0c;自带的Edge却不行 方法A&#xff1a;关闭代理 Google自带翻译…

iptables命令详解

简介 iptables 是 Linux 系统中用于配置 IPv4 数据包过滤规则的工具。它是 Linux 内核中 Netfilter 框架的一部分&#xff0c;通过设置规则&#xff0c;可以实现网络包的过滤、NAT 转发、端口映射等功能。 基本概念 表&#xff08;Tables&#xff09;&#xff1a; filter 表…

【牛客】几何糕手、国际裁判带师、数位dp?、灵异背包、矩阵快速幂签到、第一次放学

文章目录 《几何糕手》题目描述思路代码 《国际裁判带师》题目描述思路代码 《数位dp?》题目描述思路代码 《灵异背包》题目描述思路代码 《矩阵快速幂签到》题目描述思路代码 《第一次放学》题目描述思路代码 《几何糕手》 题目链接 题目描述 “芝士肾么&#xff1f;” 地…

Python学习03—Python语法元素分析

一、程序的格式框架 1.1 代码高亮 代码高亮是Python编程环境根据代码不同含义&#xff0c;给予不同色彩标注的一种色彩辅组体系。在不同的代码编程环境中&#xff0c;代码高亮的表现形式各有不同。 1.2 缩进 缩进是一行代码开始前的空白区域&#xff0c;它用来表达程序的格式…

php比较运算,强相等(===)弱相等(==)表

弱相等&#xff08;&#xff09; 符号为&#xff1a; 规则为&#xff1a;只比较值&#xff0c;不比较类型&#xff0c;只要值对就为true 样例&#xff1a;比较整型123和字符串"123"&#xff0c;运行结果给出了true 弱相等表&#xff1a;* 代表在 PHP 8.0.0 之前为…

使用trace工具分析Mysql如何选择索引

背景说明 工作中,可能会遇到执行一个SQL,明明有索引,但是采用explain分析后发现执行结果并未走索引。甚至还有部分SQL语句相同就只是查询条件不一样也会出现有的走索引,有的不走索引情况。比如: 我的示例环境有个employees表,并有个idx_name_age_position的联合索引…

Dirichlet Process 4

每一个样本都有自己对应的&#xff0c;有多少个样本就有多少个 如果有a个相等&#xff0c;那么我们能够相信这a个对应的样本x属于同一类的 要保证能够相等&#xff0c;所以要从一个离散的分布&#xff0c;即G中产生 所以有如下关系 图模型如下&#xff1a; &#xff0c;这里面…

顺序表和链表【数据结构】【基于C语言实现】【一站式速通】

线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表和链表的物理结构&#xff1a; 线性表在逻辑上是线性结构&…