用NUXT.JS,轻松搞定SEO!
nuxt.js 是什么?
如果你正在准备开发一个SEO友好的新项目,而且准备用 vue 开发,那么恭喜你,用 nuxt 是一个成本和效率都比较优秀的方案。
官方文档
知识中心案例
简单介绍下背景,这是一个专门为氚云低代码平台引流的知识分享平台,页面非常简单,首页,详情页,搜索页,同时适配PC端和移动端,移动端适配方案在下面。
项目地址:知识中心-氚云
nuxt2 + vue2 + element UI + axios
1.项目搭建
// 确保安装了 npx(npx 在 NPM 版本 5.2.0 默认安装了)
npx create-nuxt-app <项目名>yarn create nuxt-app <项目名>

回车

继续回车,一般建议用 ts

自己用啥就选啥

选择UI框架,这里也可以不选,如果已经确定好了UI框架,建议直接选择,非常好用。
我用的 element

选择模板引擎 HTML
接着选择 axios 发送请求

选择代码规范工具,我选 ESLint

选择测试框架,建议养成单元测试的习惯,提成代码质量。

选择渲染 mod,选第一个

选择 node.js

选 jsconfig.json

选 None

选 git
等待生成项目。

2.项目结构

2.1 运行项目
// 运行项目
npm run dev// 部署 第一步
npm run build// 部署 第二部
npm run start
浏览器出现下面,就ok了。

2.2 目录解析
- components: 项目组件;
- pages: 项目页面 + vue 路由。nuxt会根据pages的目录结构生成 router。页面目录
pages用于组织应用的路由及视图。Nuxt.js 框架读取该目录下所有的.vue文件并自动生成对应的路由配置; - plugins:该配置项用于配置那些需要在
根vue.js应用实例化之前需要运行的 Javascript 插件,如初始化选择的 Element UI,swiper 等; - static: 静态资源,如image,css,less等;
- middleware:中间件,后面会介绍。我是用它来做移动端和pc端适配,非常好用;
- nuxt.config.js 配置文件,一些重要的配置后面会说,官网;
3.新手开发常见问题
这里是个人开发过程中遇到的一些问题,以及踩过的坑,分享一下,希望对客官有用
3.1 页面数据问题
- 只能在 pages 目录下的.vue文件才能使用 asyncData,用axios 请求数据。注意刚进入页面的第一次请求是服务端去请求数据,浏览器是看不到的,看控制台,还要这里赋值的时候最好跟后台确定下是否有空值,有空值得自己判空,不然很容易出bug。还有这里不要用window 对象!!

数据请求成功后,赋值到 vue 的data中。这样数据这块基本就没啥问题了。
- 在 asyncData 中获取路由数据 ,这里是文章详情页

asyncData 会传出当前上下文对象给我们,需要啥去取就行了,参数可以看文档或者自己打印出来研究。
3.2 在 nuxt 中使用 swiper
- 这里搞了我不少时间。首先swiper就有点坑,版本对应关系有点乱,网站搜了好多信息把才把版本弄好,接下来结合nuxt 还有坑。先看下版本吧:中文api - Swiper3|Swiper中文网
{"swiper": "4.5.0","vue": "2.7.14","vue-awesome-swiper": "3.1.3"
}
接下来配置插件,nuxt.config.js,ssr设为false是让让该组件服务端不渲染。

再看下plugins/swiper.js
import Vue from 'vue'
import css from 'swiper/dist/css/swiper.css' // 注意css路径
import VueAwesomeSwiper from 'vue-awesome-swiper'
export default () => {Vue.use(VueAwesomeSwiper,{css})
}
现在你就可以在项目里面用了,无需引用。这里注意的是用 <client-only></client-only>标签包裹,不然在客户端会多一层 <swiper> </swiper>。

- 动态路由,_id j就是动态路由,按照官网给的规则配置就行了。

3.3 移动端适配
- 移动端和pc端页面是分开的。这里采用路由中间件来做。我们知道 nuxt 分为服务端和客户端,那么在服务端收到请求的时候肯定能多获取请求的客户端信息,那么根据这个信息跳转到对应的 page页就行了。
- 配置中间件,在根目录新建文件夹 middleware,创建自定义中间件 isMobile.ts
/*** 该中间件用来判断是移动端还是PC端,根据请求信息来判断,同时重定向到对应的页面* @param context*/
export default function(context:any) {context.userAgent = process.server ? context.req.headers["user-agent"] : navigator.userAgent;context.isMobile = isMobile(context.userAgent);// 如果是移动端客户,且路由不存在 mobile 标识,进行重定向,if (context.isMobile && context.route.path.indexOf('mobile') === -1) {// 首页重定向if (context.route.path === '/knowledge/home') {context.redirect(302,'/site'+ context.route.path +'-mobile')}// 详情页重定向if (context.route.path.indexOf('/knowledge/detail') !== -1) {context.redirect(302,'/site/knowledge/detail-mobile/' + context.route.params.id)}}
}function isMobile(UA:string) {return /(Android|webOS|iPhone|iPod|tablet|BlackBerry|Mobile)/i.test(UA);}
在 nuxt.config.js 进行配置

3.4 网关层级导致 swiper 无法正常展示
现象:项目部署后直接访问 ip 一切正常,用域名访问 swiper 就是无法显示,组件没有被解析。目前猜测原因是网关层发生跳转,导致nuxt 服务端和客户端信息传递异常,没能正确解析 swiper。所以使用 nuxt 部署后,最好是能直接访问到该项目,或者有独立域名。
相关文章:
用NUXT.JS,轻松搞定SEO!
nuxt.js 是什么? 如果你正在准备开发一个SEO友好的新项目,而且准备用 vue 开发,那么恭喜你,用 nuxt 是一个成本和效率都比较优秀的方案。 官方文档 知识中心案例 简单介绍下背景,这是一个专门为氚云低代码平台引流…...
什么是电商RPA?电商RPA能解决什么问题?电商RPA实施难点在哪里?
RPA机器人可以应用于各个行业和领域,例如金融、保险、制造、物流、电商等。它可以减少人工错误和重复工作,提高效率和生产力。RPA还可以在处理大量数据时加快处理速度,提供更准确和可靠的结果。此外,RPA还可以为员工提供更有价值的…...
【BUG】Docker启动MySQL报错
个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…...
Spring Boot通过企业邮箱发件被Gmail退回的解决方法
这两天给我们开发的Chrome插件:Youtube中文配音 增加了账户注册和登录功能,其中有一步是邮箱验证,所以这边会在Spring Boot后台给用户的邮箱发个验证信息。如何发邮件在之前的文章教程里就有,这里就不说了,着重说说这两…...
Windows使用MobaXterm远程访问ubuntu20.04桌面
参考ubuntu 2020.4 安装vnc 一、脚本文件 remote_setup.sh脚本文件内容: #! /bin/bash #参考链接:https://blog.csdn.net/hailangdeyingzi/article/details/124507304 sudo apt update sudo apt install x11vnc -y sudo x11vnc -storepasswd telpo.12…...
C++注释风格
1. 文件头注释 每个文件都应该开始于一个注释块,描述文件的目的、作者、创建日期和版权信息。 /** FileName: MyClass.cpp* Purpose: Provides functionality for XYZ operations.* Author: [Your Name]* Creation Date: YYYY-MM-DD* Last Updated: YYYY-MM-DD* C…...
Linux 编译内核模块出现--Unknown symbol mcount
文章目录 Linux suse: # cat /etc/os-release NAME"SLES" VERSION"12-SP2" VERSION_ID"12.2" PRETTY_NAME"SUSE Linux Enterprise Server 12 SP2" ID"sles" ANSI_COLOR"0;32" CPE_NAME"cpe:/o:s…...
Pywin32 Cookbook by Eric
Writing Prompt 现在你是一名专业的Python工程师,请你根据"Pywin32_Funtion"函数的功能,为其编写一个清晰的文档说明Functions win32gui.GetWindowDC(hwnd) 描述 win32gui.GetWindowDC()函数用于获取指定窗口的设备上下文(Devi…...
indexDB入门到精通
前言 由于开发3D可视化项目经常用到模型,而一个模型通常是几m甚至是几十m的大小对于一般的服务器来讲加载速度真的十分的慢,为了解决这个加载速度的问题,我想到了几个本地存储的。 首先是cookie,cookie肯定是不行的,因为最多以只…...
Ubuntu 20.04配置静态ip
ip配置文件 cd /etc/netplan配置 根据需求增加 # Let NetworkManager manage all devices on this system network:version: 2renderer: NetworkManager # 管理 不是必须ethernets:enp4s0: #网卡名dhcp4: no #关闭ipv4动态分配ip地址dhcp6: no #关闭ipv6动态分配…...
Tushare入门小册
Tushare入门小册 一、Tushare平台介绍 Pro版数据更稳定质量更好了,我们提供的不再是直接从互联网抓取,而是通过社区的采集和整理存入数据库经过质量控制后再提供给用户。但Pro依然是个开放的,免费的平台,不带任何商业性质和目的…...
<c++开发>通信工具 -之-SOME/IP移植部署 第一篇文章
<c开发>通信工具 -之-SOME/IP移植ubuntu部署 第一篇文章 一 前言 SOME/IP (Scalable service-Oriented MiddlewarE over IP) 是一种通信协议,主要用于嵌入式系统和车载网络中的服务导向通信。SOME/IP是AUTOSAR(AUTomotive Open …...
权威的软件测试服务供应商分享,怎么获得软件安全检测报告?
我们深知在如今的数字化时代,软件安全对于企业和个人来说具有极其重要的意义。然而,许多用户对于软件安全测试报告的概念还不够清晰,也不知道如何获得这样的报告。在本文中,小编将为您简析什么是安全测试报告以及如何获取这样的报…...
管理类联考——逻辑——真题篇——按知识分类——汇总篇——二、论证逻辑——假设——第二节——搭桥假设
文章目录 第二节 假设-分类1-搭桥假设-当题干推理存在明显断点,常见形式比如:“因为A→B,C→D,所以A→D”,则正确选项为“B→C”真题(2014-39)-假设-分类1-题干推理存在明显断点-搭桥假设-建模搭桥-“因为A→B,所以A→C”,搭桥假设为“B→C”真题(2019-44)-假设-分…...
百度云BOS云存储的图片如何在访问时,同时进行格式转换、缩放等处理
前言 之前做了一个图片格式转换和压缩的服务,结果太占内存。后来查到在访问图片链接时,支持进行图片压缩和格式转换,本来想着先格式转换、压缩图片再上传到BOS,现在变成了上传后,访问时进行压缩和格式转换。想了想&am…...
go生成文件md5、sha1摘要简单示例
备注 go官方文档 https://pkg.go.dev/crypto/md5 已经给出如何使用该package生成文件或者字节数组的摘要值, 参照即可。 摘要值不是对文内容的加密,它主要用来进行checksum,就是验证两个文件内容是否一致,是否被篡改或者变化了。…...
Docker容器:docker数据管理、镜像的创建及dockerfile案例
文章目录 一、docker数据管理1.为何需要docker数据管理2.数据管理类型3.数据卷4.数据卷容器5.容器的互联 二.docker镜像的三种创建方法1.基于现有镜像创建1.1 启动镜像1.2 生成新镜像 2.基于本地模板创建2.1 OPENVZ 下载模板2.2 导入容器生成镜像 3.基于dockerfile创建3.1 dock…...
Ajax fetch Axios 的区别
AJAX:一种创建交互式网页应用的网页执行交互技术 通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。意味着:在不重新加载整个网页 的情况下,对网页某部分进行更新。 缺点: 针对MVC编程,…...
数据库结构差异对比工具
简介 前几年写了一个数据库对比工具,但是由于实现方式的原因,数据库支持有限,所以重新设计了一下,便于支持多种数据库,并且更新了UI。 新版地址:https://gitee.com/xgpxg/db-diff 旧版地址:h…...
Shell编程学习之breakcontinuereturn的应用
Shell编程中的break关键字:break关键字:退出最近的循环,后续循环不再执行;break关键字用法: break #结束本层循环 break 数字n #结束n层循环测试代码1: #!/bin/bashfor((i1;i<6;i)) dofor((…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
