一次全栈实践心得

news/2025/2/26 7:22:29

话不多说,先放项目体验地址 (适配移动端) :掌上饥荒

前端技术栈

  • vue
  • vue-router
  • vuex
  • webpack
  • axios
  • better-scroll
  • lavas
  • vuetify

后端技术栈

  • egg
  • express
  • mysql
  • mongo

运维

  • nginx
  • pm2
  • https
  • oss对象存储
  • cdn
  • dns云解析

起始

在开始做之前,我的技术栈中只有vue相关的前端知识。后端只了解一点mysql,运维零基础。一路支撑我走过来的动力,除了项目本身的价值之外,很大一部分在于探索未知技术领域的新奇感

前端

自17年三月chrome提出渐进式web应用后我就一直很关注,就想着实践一下。从lavas开始说吧,lavas的初衷是快速地接入pwa的相关特性,包括骨架屏离线缓存AppShell等等。

  • 骨架屏简单来说就是替代loader,在用户等待页面加载时,更加耐心。骨架屏对于用户体验的提升很大,淘宝饿了吗的页面大量地用到了骨架屏。
  • AppShell是指把公共的组件像headerslider底部导航等抽象出来放到根组件。其它拥有路由的页面只需要配置参数,以及根据eventBus传递的事件做处理就可以了,比起之前往子组件导入公共组件的方式优雅不少。
  • 离线缓存,是指即使在无网的情况下,页面还是会显示基础的app结构,而不是未连接互联网。service worker的使用是一个难点,各位有兴趣可以去lavas官方站点看看,那里有不错的文档。

后端

最开始我只是想提供一些数据服务,后端用express写了一些简单的接口,用mongo存储非结构化的物品资料的数据。部署的时候会用到pm2,pm2的作用是代码出错node会自动重启,而不是整个服务崩溃。刚上线的时候发现被植入了广告,是一种被称之为dns劫持的东西。就是第三方网络运营商在dns服务器上做了手脚,开个dns云解析就好了。

随着用户增加,我开始想实践一些更复杂的功能,于是就接入了用户系统。就是登录,注册,发文,评论,回复这些功能。express很难支撑社区相关的业务逻辑,我需要一种更严谨的后端架构,于是开始使用eggegg时基于的koa的,开发体验跟java后端那种mvc的开发模式很像:

  • router负责调度请求给controller处理
  • controller处理具体业务逻辑
  • service负责跟数据打交道,一些增删改查的逻辑 不仅如此,egg还有自己的插件接入mysqlmongo,并且制定了严格的规范。值得一提的是,使用egg接入阿里云的一些服务会很方便。比如接入oss做文件上传。顺带一提,oss的功能很强大,比如你想使用不同尺寸或者不同压缩比的图片,只需要在图片路径后添加在oss控制台添加好的样式名就可以了,而不用去改源文件。oss接入cdn也非常方便,网络链路层的优化对于静态资源加载速度的提升很大。

服务端

同源策略中有一项是同协议,也就是说http访问不了https的接口,所以为了实践pwa相关的特性做了全站https。

阿里云和腾讯云其实都提供了免费的https证书,不过不是通配符型的,也就是说你的二级域名用不了。由于开了expressegg两个服务,所以我分别申请了阿里云和腾讯云的证书,用nginx做代理。为了使之前老用户可以正常访问,还需要把http的80端口重定向到https的443端口。https部署的过程现在看来其实很简单,就是把证书放到站点指定目录下,然后更改nginx的配置就可以了,不过由于之前没接触过运维相关的知识,折腾了不少时间。

如何坚持下去

个人项目很容易烂尾,究其原因是得不到即时反馈。我有一些建议,帮助你持续坚持下去:

  • 项目的出发点能极大地调动你的积极性,要么有给你带来财富自由的可能,要么能促进社区成长,成就个人荣誉
  • 拥抱社区,弄清楚你的直系用户,并在他们经常聚集的论坛分享你的想法和进度,获取反馈(百度贴吧)
  • 接入统计,观察站点每天浏览量新增用户的起伏就是一个很好的反馈(Growingio是个不错的选择)
  • 尝试盈利,有了一定的流量后可以开始接入广告,例如淘宝联盟。从初级淘宝客到拥有钻石展位,一路升级打怪,很有意思。

结语

对我而言,完成这个项目最大的收获应该是视野的提升。看问题的角度不仅仅局限于前端,也使得我在实际的工作中能承担更多的任务和责任。

转载于:https://juejin.im/post/5b5a7099e51d455f5f4cfbdf


http://www.niftyadmin.cn/n/3152717.html

相关文章

给文本框添加灰色提示文字

html><head><title>中国站长天空-网页特效-表单特效-给文本框添加灰色提示文字</title><meta http-equiv"content-Type" content"text/html;charsetgb2312"></head><body><!--把下面代码加到<body>与<…

linux常用命令-2磁盘管理

以下为linux常用的命令举例。 (注&#xff1a;#后面的为注释&#xff0c;输入命令时不要写) &#xff08;二&#xff09;磁盘管理 2.1 cd&#xff08;切换目录&#xff09; cd #将目录转到当前用户的默认工作目录 cd ~ #同上 cd ~chen #转到用户chen的默认工作目录 cd /…

病毒基础理论

此篇讲述的是一些概念&#xff0c;比如&#xff1a;什么是***&#xff1f;什么是病毒&#xff1f;什么又是恶意软件呢&#xff1f;等等~俗话说&#xff1a;知己知彼&#xff0c;才能百战不殆~Ps&#xff1a;病毒是怎么命名的? 其实只要我们掌握一些病毒的命名规则&#xff0c;…

mysql workbench 打开出现停用现象

刚下载了mysql workbench 8.0CE &#xff0c;电脑是windows64&#xff0c;可是出现可以打开workbench&#xff0c;当查询的时候就立即停止的现象。 解决这个问题&#xff1a; 首先&#xff0c;确保安装了 其次&#xff0c;打开C:\Users\Administrator\AppData\Roaming\MySQL\…

indexOf 可用于字符串和数组

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 indexOf 与String类似&#xff0c;Array也可以通过indexOf()来搜索一个指定的元素的位置&#xff1a; var arr [10, 20, 30, xyz]; arr.indexOf(10); // 元素10的索引为0 arr.indexOf(20); // 元素20的索引…

linux常用命令-3系统管理

以下为linux常用的命令举例。 (注&#xff1a;#后面的为注释&#xff0c;输入命令时不要写) &#xff08;三&#xff09;系统管理 3.1 date&#xff08;显示或设置系统时间与日期&#xff09; date #显示当前的系统时间与日期&#xff0c;例如&#xff1a;2008年 10月 13日…

哲理故事三百篇[转]

正在处理您的请求...作者tag:8> other a> other CSDN 推荐tag:企业 员工 管理 下属

visio增加连接点

在画系统架构图的时候遇到一个问题&#xff0c;如果一个图形本来有的连接点不够&#xff0c;需要在任何的位置上增加连接点&#xff0c;看了很多网络介绍&#xff0c;但是总是增加不成功&#xff0c;继续发现接下来问题揭晓。 2013版本visio举例&#xff0c;首先在开始中找到连…