前言

对于一些不长变的前端项目中,如个人博客、公司官网,可能技术选型为SSG框架会相对比之前的CSR会更好些,也会更快,最近研究了下Gatsby框架,感觉不错,就简单写了一个用其访问MySQL数据库,并显示到页面的一个dome记录下学习心得

步骤

1、安装Gatsby-cli脚手架

npm install -g gatsby-cli

2、通过Gatsby-cli脚手架新建一个项目

gatsby new gatsby-site

其中gatsby-site是项目名称,自己随便取

3、进入项目根目录并下载MySQL插件

cd gatsby-site && npm install gatsby-source-mysql

4、修改Gatsby配置文件(gatsby-config.js),添加插件

{resolve: `gatsby-source-mysql`,options: {connectionDetails: {host: 'localhost',user: 'root',password: 'root',database: 'gatsby'},queries: [{statement: 'SELECT * FROM goods',idFieldName: 'id',name: 'goods', // 这个不是表名,别搞混了}]}},

5、打开src/pages/index.js文件,修改代码

当然我这里用了一个mantine的组件库,只是为了好看而已,其中你可能会需要了解graphql语法

import * as React from "react"
import { graphql } from "gatsby"import { Table } from '@mantine/core';import Layout from "../components/layout"
import Seo from "../components/seo"const IndexPage = ({ data }) => {return (<Layout><Seo title="Home" /><Table striped ><thead><tr><th>id</th><th>价格</th><th>地点</th><th>发布时间</th></tr></thead><tbody>{data.allMysqlGoods.edges.map(({ node }) =>(<tr key={node.mysqlId}><td>{node.mysqlId}</td><td>{node.price}</td><td>{node.place}</td><td>{node.push_time}</td></tr>))}</tbody></Table></Layout>)
}/* 这是graphql语法,其实在项目启动,构建的过程中,Gatsby会去通过插件加上我们之前加的配置文件,去连接你的MySQL,然后查询出结果,然后再通过graphql语法去筛选出mysql插件查出的结果,因为还有模板里面会含有其他插件,如`gatsby-plugin-sharp`、`gatsby-plugin-image`等等,它们查出来的结果是它们的,mysql插件查出来的是mysql的查询结果
*/
export const query = graphql`{allMysqlGoods {edges {node {idnameplacepricepush_timemysqlId}}}
}
`export default IndexPage

这是我的gatsby数据库以及goods

6、启动项目

npm run develop 或者 gatsby develop

访问默认端口8000,查看效果

总结与反思

问:为什么要学这个呢?难道之前的vue或者react写的项目用axios请求数据,再显示到页面上面达不到上面的效果吗?

答:首先学这个并不是为了新技术而学它,没啥用,不明白它的价值,学了也是白学,还不如躺平;

其次按照以前写一个spa应用,大概流程就是axios发请求到后端 -> 后端收到请求,连接mysql -> 查询出结果,响应给前端 -> 前端收到数据 -> 通过框架的diff算法,得出html,渲染到页面上

但是你想过一个问题没有,上面的流程当中,在请求发出去开始,到框架帮你把数据解析成html,渲染到页面上结束,这个中间的过程,你的页面是不是还没有数据?是不是相当于是空白?如果这个空白太长,作为一个用户而言,他也许不知道要经历上面那个过程,他只知道 “你这个网站好慢啊,我点了查询,怎么半天不出来数据啊”,那作为开发者你就只能通过loading动画,或者骨架屏之类的东西来告知:用户网站正在请求数据,请耐心等待…

所以才会有SSG(Static Site Generation)静态站点生成,而Gatsby就是该框架的其中之一技术,也就是我在项目构建的时候就去连接数据库,或者请求其他资源、数据,然后将这些数据放进一个json文件,再直接读这个json文件,把对应的html放在页面上,而用户去访问这个页面的时候,其实就是一个具有完整数据的html了,所以会很快,用户都不用等其他js文件加载或者执行了,就可以看到页面了,就不会有空白页面了

当然也并不是那么完美,肯定是有缺点,比如说对于频繁的数据交互,那这个显然是不好的方案,因为项目构建完了之后,那个json文件就是死的了,是静态的,而解析出的html就是读这个json文件里的数据,假如过了一秒数据就变了,那此时页面就还是旧数据,就会误导用户了,又只能重新构建来获取新的数据了是吧。

SSG框架Gatsby访问数据库,并显示到页面上相关推荐

  1. 使用 Hasor 从数据库查询显示到页面上

    为什么80%的码农都做不了架构师?>>>    在 Hasor 的体系中开发 Web 应用程序需要至少 Hasor-Core.Hasor-Web 两个模块来共同完成.其中 Hasor ...

  2. 访问Google首页显示该页无法显示

    当我们访问Google首页显示该页无法显示时,发生了什么 首先我们在浏览器搜索栏输入www.goole.com 我们的主机就会发出一个ARP请求报文,一个广播数据包,向该网段所有主机发出一个信息,想知 ...

  3. echarts如何显示在页面上

    echarts如何显示在页面上 1.引入echarts的相关.js文件 <script src="js/echarts.min.js"></script> ...

  4. mysql 人名_jsp为什么按人名查询mysql结果不显示在页面上?可以

    jsp为什么按人名查询mysql结果不显示在页面上?可以 关注:213  答案:2  信息版本:手机版 电脑版 解决时间 2021-01-16 02:38 提问者这笑,有多危险 2021-01-15 ...

  5. 将请求返回的图片转为Base64形式显示在页面上

    情景: 如图该请求返回一张图片,我该如何显示在页面上呢? 代码如下: transformArrayBufferToBase64 (buffer) {var binary = '';var bytes ...

  6. jsp图片上传提交前,图片显示在页面上

    <divclass="upload_box"> <b>上传图片</b> <inputtype="file"name=& ...

  7. Flask框架之访问数据库

    数据库按照一定的规则保存程序数据,程序再次发出请求,取回所需的数据.如果表和表.表和字段.数据和数据之间存在着关系,就称为关系数据库,反之则称为非关系数据库.典型的关系型数据库主要有Oracle和My ...

  8. wpf使用入式mysql_c#之wpf:从mysql数据库中数据绑定到页面上

    博主最近在做小项目时,需要将数据绑定到页面上,无奈c#前端没有学好,所以走了写弯路. 1.listview:首先listview是一个比较好的展示数据库的数据的控件,可是呢,在wpf中listview ...

  9. javaweb网页上传图片并显示在页面上,并在服务端存到磁盘(base64编码解码)

    最近做一个web项目用到上传图片,于是根据个人的知识 及网上的搜集,将其总结于下: 上传图片时显示图片在页面  <input id="fileload"  type=&quo ...

最新文章

  1. c语言中ai是什么,AICODE在C语言教学中应用研究.doc
  2. 10g TNS 13541 监听错误 tnsping可以但是conn system/manager@mult1.net 报错
  3. Codeforces 1336E Chiori and Doll Picking (子集和变换、线性基、阈值算法、状压 DP、组合计数)...
  4. 如何判断 ios设备的类型(iphone,ipod,ipad)
  5. java 如何让循环结束,跳过某个条件,跳出当前的多重嵌套循环
  6. [Leedcode][JAVA][第236题][二叉树的公共祖先][后序遍历][BFS]
  7. 一个计算机台式机的组装方案,既能带又便宜的电脑组装方案,华擎deskmini310组装晒单...
  8. 入门科普:什么时候要用Python?用哪个版本?什么时候不能用?
  9. 云图说|图解DGC:基于华为智能数据湖解决方案的一体化数据治理平台
  10. C++ 11 Lambda表达式
  11. 模拟生产者-消费者问题和读者-写者问题
  12. 阶段3 1.Mybatis_11.Mybatis的缓存_8 mybatis的二级缓存
  13. 驱动人生解锁“C盘瘦身”功能,助力电脑快速运行
  14. 算法大亨Carl的面试简历长啥样?同款模板让你脱胎换骨
  15. java源码app,飞飞CMS双端JAVA原生APP源码
  16. js 获取两个数组的交集,并集,补集,差集(转载+收藏)
  17. iphone11返回上一级手势怎么设置_iPhone11怎么返回手势操作
  18. 用malloc开辟二维数组的三种办法
  19. 有用的“歪门邪道”-设计模式
  20. 安装Microsoft-project 2016

热门文章

  1. 华为云计算之FusionCompute8.0版本安装
  2. ofo北京总部人去楼空,是资本寒冬还是冬眠?
  3. SpringMVC之JSON和全局异常处理
  4. 计算机一键黑屏,电脑快速黑屏软件(Black Screen)
  5. apache mina 学习(十)-----Codec Filter
  6. 三相异步电动机——双向运行控制回路
  7. c语言求20以内的质数,c语言求出给定范围内的所有质数
  8. 仿着锤子科技官网进行的一个angular4.0项目~~~
  9. Vue中引入并使用动态图标
  10. 基于区块链的供应链金融开源软件分析