解决方案:serverless实战,基于uniCloud从零开始实现一个前端日志监控系统
优采云 发布时间: 2022-10-08 16:10解决方案:serverless实战,基于uniCloud从零开始实现一个前端日志监控系统
Serverless实战,基于uniiCloud实现前端日志监控系统从零开始写在前面
Serverless是近几年比较流行的概念,也是大前端发展的一个重要方向。无服务器的兴起已经存在了一段时间。早在几年前,微信就推出了微信小程序云开发功能。它不需要搭建服务器,只需要利用平台提供的能力快速开发服务即可。同时提供云数据库、云存储、云功能等功能,大大降低了开发者的开发成本,深受开发者的喜爱。就在去年 uni-app 还推出了自己的无服务器服务 - uniCloud。
uniCloud 是阿里云和腾讯云的 serverless 服务上 DCloud 的一个包。它由IaaS层(阿里云和腾讯云提供的硬件和网络)和PaaS层(DCloud提供的开发环境)组成。————————— uniCloud官网
与其他云开发产品相比,uniCloud具有以下优势:
uniCloud开发可以配合自带的HbuilderX编辑器实现1+1大于2的效果;它可以无缝连接uni-app和uni-ui,实现产品、UI和服务的有机统一。提供云功能URLization功能,非uni-apps开发的系统也可以轻松访问,使产品更加通用和通用。
默认情况下,云函数只被自己的应用通过前端的 uniCloud.callFunction 调用,不会暴露给外网。一旦 URL 化,开发人员需要注意业务和资源安全。
云函数 URL 化是 uniCloud 为开发者提供的 HTTP 访问服务,允许开发者通过 HTTP URL 访问云函数。
场景一:如App端微信支付,需要配置服务器回调地址。在这种情况下,需要一个 HTTP URL。场景二:非uni-app开发的系统,如果要连接uniiCloud读取数据,还需要通过HTTP URL访问。
下面这篇文章将基于uniClound从零开始搭建一个前端日志监控系统。
日志监控系统介绍
本文的主要目的是介绍serverless和uniClound入门,重点介绍采集和日志的展示。为了简化系统日志数据主要来自两个方面:一是Vue的全局错误捕获,二是请求响应*敏*感*词*拦截的后端API请求错误。该系统的简单说明如下:
Vue全局错误捕获的简单实现
根据Vue的官方文档,Vue的全局错误捕获只需要配置Vue.config.errorHandler即可。为了让我们的日志监控系统更加完善和通用,除了Vue的错误信息,我们还需要采集发生的错误。时间(uniCloud有时区差异,建议使用时间戳来表示时间),出错的项目名称project。Vue全局错误捕获方法实现如下,其中addVueLog是我们要通过云函数实现的API接口,后面会介绍该接口的实现。
// my-vatchvueerror.js
/****************************************************
* @description 捕获Vue全局错误
* @param {*} err 异常错误
* @param {*} vm 页面示例
* @param {*} info 错误说明
* @return {*}
* @author mingyong.g
****************************************************/
export default function(err, vm, info) {
const route = (vm.$page && vm.$page.route) || (vm.$mp && vm.$mp.page.route); // 获取uni-app项目的页面路由
let log = { // 日志对象
err: err.toString(),
info,
route,
time: new Date().getTime(),
project:"test"
};
addVueLog(log); // 新增日志的接口
}
复制代码
在 main.js 中配置错误捕获功能
// main.js
import catchVueError from "../my-vatchvueerror";
Vue.config.errorHandler = catchVueError;
复制代码
响应*敏*感*词*错误日志采集
下面是一个 axios 的响应*敏*感*词*的例子。关于API错误日志,我们需要关心以下信息:
请求体是请求的参数。响应正文是收录错误描述的响应数据日志发生的时间。uniCloud 存在时区差异。建议使用时间戳来指示错误日志所在的项目。
以下代码是axios响应*敏*感*词*的简单实现,其中addApiLog是我们要通过云函数实现的API接口,接口的实现后面会介绍。这里将收录请求参数的response.config和收录响应数据的response.data作为aspect的参数直接传入,其他的公开信息在接口内部实现。
// 响应拦截
service.interceptors.response.use(
(response) => {
let data = response.data;
/*
* 此处如果后台响应体中字段Msg = "ok" 则认为接口响应有效,否则视为错误响应
* 注意:这部分逻辑需根据业务和后端接口规范适当调整
*/
if (data.Msg == "ok" ) {
return data;
} else {
addApiLog(response.config, data); // 日志采集接口
return Promise.reject(data);
}
},
(err) => {
let errMsg = "";
if (err && err.response.status) {
switch (err.response.status) {
case 401:
errMsg = "登录状态失效,请重新登录";
router.push("/login");
break;
case 403:
errMsg = "拒绝访问";
break;
case 408:
errMsg = "请求超时";
break;
case 500:
errMsg = "服务器内部错误";
break;
case 501:
errMsg = "服务未实现";
break;
case 502:
errMsg = "网关错误";
break;
case 503:
errMsg = "服务不可用";
break;
case 504:
errMsg = "网关超时";
break;
case 505:
errMsg = "HTTP版本不受支持";
break;
default:
errMsg = err;
break;
}
} else {
errMsg = err;
}
addApiLog(err.config, { statusCode: err.response.status, Msg: err.response.data }); // 日志采集接口
return Promise.reject(errMsg);
}
);
复制代码
uniCloud 管理员
为了简化开发工作,uniiCloud提供了基于uni-app、uni-ui和uniiCloud的应用后台管理框架。
UniCloud管理功能介绍
uniCloud界面
创建项目
按照官方教程,首先在HBuilderX 3.0+版本新建一个uni-app项目,选择uniiCloud admin项目模板。
创建完成后,可以按照云服务空间初始化向导来初始化项目,创建并绑定云服务空间
跑
进入admin项目,在uniCloud/cloudfunctions/common/uni-id中填写自己的passwordSecret字段(用于加密密码存储的key)和tokenSecret字段(生成token所需的key,测试时略过) /config.json文件也可以通过这篇文章)右键uniiCloud目录运行云服务空间初始化向导,初始化数据库并上传部署云功能(如果云服务空间已经创建绑定,跳过这一步),点击HBuilderX工具栏运行[Ctrl+r] -> Run to browser。如果是连接本地的云函数调试环境,上一步的云函数是不能上传的,但是数据库还是需要初始化的。从启动后的登录页面底部,
登录uniiCloud控制台:/找到上面第3步创建的云服务空间,这里我创建的服务空间是gmyl
点击详情进入云服务空间,可以看到 uniCloud admin 默认为我们创建了如下云数据表: 6. opendb-admin-menus : 左侧菜单树管理表 7. opendb-verify-codes :验证码记录表 8.uni-id-log : uniCloud 登录日志 9. uni-id-log : 权限表 10. uni-id-roles : 角色配置表 11. uni-id-users : 账户表
uniCloud admin 提供了一套完整的后台管理解决方案。我们的目的是构建一个简单的日志监控系统。有些功能这里暂时不用。现在 uniCloud 管理员关注应用程序的可扩展性。言归正传,除了上述框架自带的数据表,我们还需要创建一个数据表来存储日志数据。在这里,我创建了两个表来分别存储 Vue 日志和 API 日志。
{
"bsonType": "object",
"required": [],
"permission": {
"read": false,
"create": false,
"update": false,
"delete": false
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"project": {
"bsonType": "onject",
"description": "项目名称",
"trim": "both"
},
"url": {
"bsonType": "onject",
"description": "页面路由信息",
"trim": "both"
},
"errmsg": {
"bsonType": "onject",
"description": "错误描述",
"trim": "both"
},
"errtype": {
"bsonType": "string",
"description": "错误类型",
"trim": "both"
},
"occurrence_timestamp": {
"bsonType": "timestamp",
"description": "问题发生时间"
},
"state": {
"bsonType": "int",
"description": "0 待处理 1:已处理 ",
"trim": "both"
},
"handle_timestamp": {
"bsonType": "timestamp",
"description": "问题修复时间"
},
"reason": {
"bsonType": "string",
"description": "问题原因",
"trim": "both"
},
"solution": {
"bsonType": "string",
"description": "解决办法",
"trim": "both"
}
}
}
复制代码
创建云函数
回到HbuilderX找到刚才创建的项目,依次展开uniCloud>>cloudfunctions,右键cloudfunctions点击新建的云函数addVueLog
一个初始的云函数结构如下,其中前端传递的参数是通过event.body获取的。接下来的主要任务是将前端传递的日志对象存储到云数据库中。使用云函数操作云数据库的教程可以参考官方文档:uniapp.dcloud.io/uniCloud/cf…,这里不再赘述。
// 初始云函数
'use strict';
exports.main = async (event, context) => {
//event为客户端上传的参数
console.log('event : ', event)
//返回数据给客户端
return event
};
复制代码
// 将数据写入云数据库
'use strict';
const db = uniCloud.database();
exports.main = async (event, context) => {
//event为客户端上传的参数
let data = event.body ? JSON.parse(event.body) : event;
if (event.project == "" && !event.body) { // 判断数据是否有效
return {
Msg: "Invalid Data!",
Data: "",
Count: 0
}
} else {
const dbCmd = db.command
const $ = dbCmd.aggregate
let res = await db.collection('vuelog_db').add(data) // 向表vuelog_db插入一条数据
//返回数据给客户端
return {
Data: "",
Msg: "ok",
Count: 0
}
}
};
复制代码
云函数url化
开启云函数url化前,先上传部署云函数,找到对应的云函数,右键上传部署。
如果上传成功,可以在uniCloud控制台的云功能列表中找到刚刚上传的云功能。
登录uniiCloud后台,选择要管理的服务空间。点击左侧菜单栏的【云功能】,进入云功能页面。点击待配置云功能的【详情】按钮,配置访问路径。
云函数url化后,可以像通用API接口一样调用。这里的add_vuelog是Vue全局错误捕获方法中addVueLog接口的实现。运行测试
在postman、test add_vuelogAPI等API调试工具中,不再演示测试过程,云函数调用成功,云数据库会新增一条记录。函数来生成数据列表页面。
项目
页面路由
错误描述
错误类型
原因
解决方案
发生时间
修复时间
状态
操作
搜索
{{ item.project }}
{{ item.url }}
{{ item.errmsg }}
{{ item.errtype }}
{{ item.reason }}
{{ item.solution }}
已修复
待修复
处理
删除
{{ engine.name }}
复制代码
页面写好后,别忘了在uniiCloud admin自带的菜单管理中注册路由信息。如果没有注册路由信息,则页面无法在左侧菜单栏中显示。
再次优化
为了让界面更加美观,结合uni-app插件市场的ReportPro数据报表(云功能版)和秋云ucharts echarts高性能跨端图表组件升级页面首页,使数据板。这是效果的渲染。实现逻辑参考云函数来操作云数据库:/uniCloud/cf...
一些个人感受
之所以做这样一个项目,一方面是在技术的研究和探索中。早在2019年就接触过微信小程序的云开发模式,但一直都在做一些技术探索和了解。没有真正的动手实践;另一方面,随着我们自己开发的一些项目的实施,难免会出现错误和bug。过去,由于用户反馈出现错误,然后处理滞后,导致用户体验非常差。随着时间的推移,用户很容易丢失产品。信心甚至会引起怀疑。由此产生了为这个项目谋生的想法,而我熟悉的uni-app也推出了云开发模式,于是这个项目就诞生了。
来说说severless的感觉吧。无服务器意味着无服务器。这里的serverless是开发用的,服务器直接由云服务器提供商提供和管理。这样,开发者只需要关注业务,前后端的差别就越来越小了。以本项目为例,整个过程没有后端参与,也没有编写SQL语句。一系列开发的API接口固然方便,但也带来一定的局限性。有了Serverless,我们不需要过多关注服务器的运维,也不需要关心我们不熟悉的领域。我们只需要专注于业务开发和产品实施。我们需要关心的事情更少,但我们可以做的事情更多。serverless 模型将进一步扩展前端的边界。现在的前端开发不再是过去的前端开发。前端不仅可以是网页,还可以是小程序、APP、桌面程序。现在前端也可以是服务器了!
阿特伍德定律:任何可以用 JavaScript 编写的应用程序,最终都将用 JavaScript 编写。
任何可以用 JavaScript 编写的应用程序最终都会用 JavaScript 编写。
写在最后
一个完整的日志监控系统还应该包括一个消息通知模块,这也是我在最初的架构中构思和规划的。由于消息通知是借助第三方服务实现的,是一个相对独立的功能模块,所以我把它独立出来了。出来,后面会单独整理成一个文章,介绍uniCloud云功能如何调用第三方API,以及如何使用npm安装第三方服务。
最后,本文同步发布在个人G公众号“前端知识营”,点击关注获取更多优质有趣内容。以后会整理好项目的源码,放到公众号上供大家参考。感兴趣的朋友可以点击下方链接关注!
(结束)
解决方案:【2019最新】平台SEO技巧工具和资源介绍
如果您不为您的产品页面、博客内容或采集集带来流量,那么您在 Google 上的排名可能不会很高。这需要进行促销以使 Google 了解商店的受欢迎程度。驱动流量不需要通过付费广告,尽管产品页面这样做是有意义的。
3.反向链接策略
您需要联系相关的小博主并与他们交换反向链接。一般来说,大多数人链接到其他博客内容或主页。通过每周写几次博客内容,您可以增加发现和链接您的内容的机会。添加您自己的统计数据或实验,以增加您与外界联系的机会。想法更容易复制,但事实和结果可以参考。
4. 让内容比你的竞争对手更有价值
无论您是在阐述某个主题还是在博客文章中提出更全面的观点,您都需要从竞争中学习。谁是你想要的 关键词 中的第一名?他们在你不做的内容中做了什么?他们排名的产品集合中是否有更多产品?还是会有更多的流量?他们有哪些?反向链接?他们是否在创造更优质的内容?了解他们在做什么,并比他们做得更好。
推荐 10 种 SEO 工具
1.插件搜索引擎优化
Plugin SEO 是一种 SEO 优化工具,可帮助您更好地优化您的在线商店。您将能够检查您的图像 ALT 标签、快速评估您的商店有哪些 SEO 问题、监控速度等等。他们还有一个高级版本,允许您编辑标题和描述等。凭借超过 1,000 条 5 星评论和 86,000 名店主使用此工具,该产品无疑是满足您的 SEO 需求的赢家。
2. SEMrush
SEMrush 可让您分析您的 PPC 活动的大量点击前数据:查找目标 关键词、查看竞争对手使用的搜索和展示广告示例、分析您兴趣库中最受欢迎的购物广告。
3.关键字规划师
关键字规划师是谷歌流行的关键字工具。浏览关键字时,您会看到可以排名的其他相关关键字。您还将看到关键字的竞争力以及这些关键字的搜索量。
4. Pingdom
Pingdom 的 网站Speed Test 是一个帮助你确定 网站 加载时间的工具。网站速度是 SEO 的重要组成部分。网站加载速度越快,客户体验越好,因此排名越高。您需要做的就是在框中添加您的 网站 URL。测试完成后,您将看到您的性能评级、加载时间、您的网站比其他网站快多少等等。此外,还对特定的性能洞察进行评分,以显示如何提高 网站 的速度。
5. 图像优化器
图像优化器可以优化谷歌搜索中的图像。这将使用默认模板轻松更改您的图像 alt 标签。
6. 产品评论
产品评论允许将评论分数添加到您的搜索引擎结果中。
7. 搜索引擎优化经理
SEO Manager 404 Error Tracker 跟踪并自动重定向 404 错误。当您上传链接列表进行手动编辑时,它可以快速修复 404 错误。Shopify 应用程序可以帮助您在电子商务平台发生变化后保持页面排名。
8.莫兹
Moz 为其客户提供用于站点审核、关键字研究、链接构建和页面优化见解的多合一工具。他们的工具会抓取您的 网站 报告任何问题或不良页面。
9. 尖叫的青蛙
Screaming Frog 是一种更好地分析内部 SEO 的工具。此工具将帮助您轻松找到错误链接和重复内容,改进您的页面标题和描述等等。
10. Ahrefs
Ahrefs 帮助您监控您的竞争对手并决定如何超越他们。您可以轻松了解您的竞争对手排名关键字并发现谁在链接到他们的 网站。
搜索引擎优化摘要
一:目标关键词分析
一般来说,网站目标关键词应该在构建初期合理定位。什么是合理的,我们可以分析竞争对手,安排关键词,网站和关键词相关性分析,关键词排名预测,关键词搜索量分析。做好关键词分析,全面综合分析更有效。
二:网站结构分析
网络结构设计的好坏可以从网站导航、目录结构、链接优化等方面体验。我们需要分析这些方面。在制作网站的时候,最好实现树状的目录结构,不要有不好的设计,不利于搜索引擎蜘蛛。
三:页面优化和网站Maps
每个页面都是您增加流量的重要基石。我们必须认真对待并优化它。即使某些页面被蜘蛛屏蔽了,只要用户可以打开它们,我们就不能马虎。网站地图让搜索引擎更容易、更快速地抓取所有页面。
四:内容更新与连接架构
搜索蜘蛛喜欢定期访问您的 网站。如果我们科学地定期更新内容,做好更新内容的原创质量和质量,相信久而久之搜索蜘蛛会对我们的网站非常友好。,排名靠前是自然而然的结果。
欢迎加入跨境电商平台实操卖家交流干货分享群、答题群,进群有门槛,但绝对有收获!
QQ群聊号码:851556500
更多跨境电商平台运营自建站引流/流量获取/广告战术/站外推广营销/流量思维/海外营销/自建站推广引流问题,可以扫描下方二维码联系我,参与学习!
(做跨境出口shopify平台的联系我)
或访问跨境电商门户了解网站:
不懂平台的可以联系我