SSG框架Gatsby访问数据库,并显示到页面上
前言
对于一些不长变的前端项目中,如个人博客、公司官网,可能技术选型为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访问数据库,并显示到页面上相关推荐
- 使用 Hasor 从数据库查询显示到页面上
为什么80%的码农都做不了架构师?>>> 在 Hasor 的体系中开发 Web 应用程序需要至少 Hasor-Core.Hasor-Web 两个模块来共同完成.其中 Hasor ...
- 访问Google首页显示该页无法显示
当我们访问Google首页显示该页无法显示时,发生了什么 首先我们在浏览器搜索栏输入www.goole.com 我们的主机就会发出一个ARP请求报文,一个广播数据包,向该网段所有主机发出一个信息,想知 ...
- echarts如何显示在页面上
echarts如何显示在页面上 1.引入echarts的相关.js文件 <script src="js/echarts.min.js"></script> ...
- mysql 人名_jsp为什么按人名查询mysql结果不显示在页面上?可以
jsp为什么按人名查询mysql结果不显示在页面上?可以 关注:213 答案:2 信息版本:手机版 电脑版 解决时间 2021-01-16 02:38 提问者这笑,有多危险 2021-01-15 ...
- 将请求返回的图片转为Base64形式显示在页面上
情景: 如图该请求返回一张图片,我该如何显示在页面上呢? 代码如下: transformArrayBufferToBase64 (buffer) {var binary = '';var bytes ...
- jsp图片上传提交前,图片显示在页面上
<divclass="upload_box"> <b>上传图片</b> <inputtype="file"name=& ...
- Flask框架之访问数据库
数据库按照一定的规则保存程序数据,程序再次发出请求,取回所需的数据.如果表和表.表和字段.数据和数据之间存在着关系,就称为关系数据库,反之则称为非关系数据库.典型的关系型数据库主要有Oracle和My ...
- wpf使用入式mysql_c#之wpf:从mysql数据库中数据绑定到页面上
博主最近在做小项目时,需要将数据绑定到页面上,无奈c#前端没有学好,所以走了写弯路. 1.listview:首先listview是一个比较好的展示数据库的数据的控件,可是呢,在wpf中listview ...
- javaweb网页上传图片并显示在页面上,并在服务端存到磁盘(base64编码解码)
最近做一个web项目用到上传图片,于是根据个人的知识 及网上的搜集,将其总结于下: 上传图片时显示图片在页面 <input id="fileload" type=&quo ...
最新文章
- c语言中ai是什么,AICODE在C语言教学中应用研究.doc
- 10g TNS 13541 监听错误 tnsping可以但是conn system/manager@mult1.net 报错
- Codeforces 1336E Chiori and Doll Picking (子集和变换、线性基、阈值算法、状压 DP、组合计数)...
- 如何判断 ios设备的类型(iphone,ipod,ipad)
- java 如何让循环结束,跳过某个条件,跳出当前的多重嵌套循环
- [Leedcode][JAVA][第236题][二叉树的公共祖先][后序遍历][BFS]
- 一个计算机台式机的组装方案,既能带又便宜的电脑组装方案,华擎deskmini310组装晒单...
- 入门科普:什么时候要用Python?用哪个版本?什么时候不能用?
- 云图说|图解DGC:基于华为智能数据湖解决方案的一体化数据治理平台
- C++ 11 Lambda表达式
- 模拟生产者-消费者问题和读者-写者问题
- 阶段3 1.Mybatis_11.Mybatis的缓存_8 mybatis的二级缓存
- 驱动人生解锁“C盘瘦身”功能,助力电脑快速运行
- 算法大亨Carl的面试简历长啥样?同款模板让你脱胎换骨
- java源码app,飞飞CMS双端JAVA原生APP源码
- js 获取两个数组的交集,并集,补集,差集(转载+收藏)
- iphone11返回上一级手势怎么设置_iPhone11怎么返回手势操作
- 用malloc开辟二维数组的三种办法
- 有用的“歪门邪道”-设计模式
- 安装Microsoft-project 2016