手摸手搭建 Vue+TS+Express 全栈 SSR 博客系统——项目架构和技术选型篇

文鸯
• 阅读 1009

前言

之前接触到了 NuxtJs ,做了一些案例,发现自己还是对整个 SSR 构建流程理解的没有很透彻,决定自己动手试试从0开始搭建 Vue SSR,并且由于苦于想重构自己的博客项目,也借此机会将 最新的SSR技术 运用到实际项目中。

前端技术选型

前端技术选型的中心在于 对 SSR 的支持程度,如果一个第三方库编写时没有考虑到通用性,那么要将它集成到一个 SSR 应用中可能会很棘手,很有可能会出现在node中调用浏览器API的情况。

  • 开发框架(Vue3)

    选用 Vue3 作为主要开发框架,可以使用 hooks 写法抽离部分逻辑,使代码结构更加清晰。

  • 预处理器(Stylus)

    和平时使用的 SCSS 预处理器对比, StylusCSS 代码书写上比前者简洁了不少,而且在遵循书写规范的基础上包容度也很高,甚至可以省去不必要的冒号和分号等。

  • 开发语言(TypeScript)

    使用 TypeScript 进行类型约束,减少未知错误发生概率,大胆修改逻辑内容。

  • 网络(Axios)

    选用 Axios 的原因是其成熟的双端运行能力,这为项目中的 SSR 带来了优势。

  • UI框架(Element-plus)

    选用适配 Vue3 的成熟 UIElement-plus,其对 SSR 也有高度支持。

  • 路由库(Vue-Router)

    搭配 Vue3Vue-Router4 ,同样也支持 SSR

  • 状态存储库(Pinia)

    选用 Pinia ,第1点是其与 Vue3 适配,其给到了 TypeScript 智能补全的功能,且比 Vuex 更轻量更简洁(去除了 mutation ),支持 hook 写法,第2点是支持 SSR ,并且官方文档有很好的服务端支持。

  • 模块打包工具(Webpack5)

选用最新的 Webpack5 ,也是想学习巩固一下相关配置用法。

  • Markdown 解析库(highLight + Marked)

highLight.js + Marked.js 搭配使用,提供更多的自定义配置,能把的网站整的花里胡哨的。

后端技术选型

后端技术基本在原有vue2-ssr项目后端基础上做了些许改动,使用了 Typescript 进行类型约束,由原来的sql字符拼接查询 更换为 ORM 框架 Sequelize, 对数据库进行更有效安全的访问。

  • Node.js
  • Express
  • MySQL
  • Sequelize(ORM 框架)
  • Axios

目录

|-- project
    |-- client 客户端项目文件夹
    |-- server 服务端项目文件夹
    |-- .browserslistrc
    |-- .dockerignore
    |-- .gitignore
    |-- .prettierignore
    |-- .prettierrc
    |-- auto-imports.d.ts
    |-- babel.config.js
    |-- components.d.ts
    |-- nodem_dev.json
    |-- nodem_prod.json
    |-- package-lock.json
    |-- package.json
    |-- postcss.config.js
    |-- README.md
    |-- todo.md
    |-- tsconfig.json
    |-- version.md

架构描述和整体思路

该项目主要以围绕 服务端渲染 的思路进行搭建,服务端渲染的整体思路我在前面的文章中也有提到,因为服务端项目我之前做过一个Vue2版本的,所用的技术栈比较过时,为了适应新环境的需要,该项目使用了前端领域最新最成熟的技术,整体架构如下图

手摸手搭建 Vue+TS+Express 全栈 SSR 博客系统——项目架构和技术选型篇

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Linux自动检测网站心跳通知shell脚本
!/bin/bashLIST("http://xxxx.com")NAME("评价系统getwindowList接口")for((i0;i<${LIST@};i))doHTTP_CODEcurlo/dev/nullsw"%{http_code}""${LIST
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Stella981 Stella981
3年前
IDEA手动创建JFinal项目(404问题处理)
!jfinal(https://oscimg.oschina.net/oscnet/4362c0d7bf744772cce1b9ad0b762c579e0.jpg)公司项目使用jfinal有一段时间了,也有自己手动搭建过项目,但是没有使用demo中jetty方式启动过项目。这几天决定参考jfinal文档更好的学习下jfinal框架,其实挺简单,但
Stella981 Stella981
3年前
JVM 字节码指令表
字节码助记符指令含义0x00nop什么都不做0x01aconst\_null将null推送至栈顶0x02iconst\_m1将int型1推送至栈顶0x03iconst\_0将int型0推送至栈顶0x04iconst\_1将int型1推送至栈顶0x05ic
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Wesley13 Wesley13
3年前
ISO27001信息安全管理体系
0x00前言初入甲方,刚开始接触的应该就是ISO27001信息安全管理体系,你拿到的应该就是一整套安全管理类的文档。在甲方,稍微有点规模的公司很注重制度和流程,岗位职责分工明细,那么这些安全管理制度,就是你所能掌控的游戏规则,几个人的信息安全部生存之道。0x01ISO27001简介ISO/IEC27001信息安全管理体系