首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【serverless实战】腾讯云·云开发+nextjs(SSR or 静态导出)实现官网动态化

【serverless实战】腾讯云·云开发+nextjs(SSR or 静态导出)实现官网动态化

作者头像
心谭博客
发布于 2020-05-06 15:36:16
发布于 2020-05-06 15:36:16
4.4K00
代码可运行
举报
文章被收录于专栏:YuanXinYuanXin
运行总次数:0
代码可运行

背景

www.cloudbase.net 云开发网站是基于 nextjs 开发,里面的内容是写在 js 配置文件。每当更新网站内容,都需要提交 git,并且本地进行静态导出,再借助腾讯云云开发的 cli 工具,部署到云开发控制台的「静态网站」服务。

但是内容的更新,不应该涉及到 git 记录(只包括代码或者配置的改动),而且每次改动都要手动 pull/push/deploy 一遍,属实麻烦。因此,需要进行动态化。

系统设计

动态化获取数据

利用 nextjs 提供的 getInitialProps 钩子,从 cms 系统对应的云数据库中拉取动态内容。并将最新的内容,结合模板代码导出为静态 html 文件。

在 getInitialProps 钩子中,环境既不是 browser,也不是 nodejs,而是 ssr 的环境。所以无法使用 tcb-js-sdk 以及 tcb-admin-node 这两个库来获取云开发的数据。

这里使用了 axios.js 来进行网络请求,理由如下:

  • 完美支持 ssr、node、browser 环境:直接用于 getInitialProps 钩子
  • 支持一级代理转发:可以在内网环境下获取外部数据

http 触发调用云函数

由于无法使用 tcb-js-sdk 和 tcb-admin-node,所以没办法通过 sdk 提供的 api 来读取云数据库的数据。

所以只能“曲线救国”,借助云函数 + http 触发功能来获取云数据库的数据:

  • 在 cloudbase 控制台编写用于读取数据库的云函数
  • 开启云函数的 http 触发:调用者可以通过 http url 的方式调用云函数,传入参数,获取云函数运行结果
  • 在 getInitialProps 钩子中,使用 axios 调用远程云函数,获取最新数据

部分代码实现

在需要动态化内容的页面组件中,添加 getInitialProps 钩子,里面通过 axios 触发云函数,获取云函数数据,并将其挂入组件的 props 中。

组件内部根据 props 的内容,生成对应的 jsx 结构。

代码实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const MainPage = ({activities, courses, articles}) => {
    // ...
    return ()
}

Main.getInitialProps = async () => {
    const promises = [
        getActivities(),
        getCourses(),
        getArticles()
    ]

    const [
        activities,
        courses,
        articles
    ] = await Promise.all(promises)

    return {
        activities,
        courses,
        articles
    }
}

Q:为什么不选择 SSR,而是使用静态导出?静态导出怎么保证实效性?

理论上来说,SSR 是 SEO+获取最新数据的理论最优方案。但是考虑到云函数搭配 ssr 存在冷热启动问题,而静态导出后的文件直接部署到云开发静态网站服务上,本质上是对象存储,访问速度更快,并且节省费用。

除此之外,借助 CI 工具,设置了定时构建,以获取最新数据进行更新。如果有紧急情况,开发人员也可以在平台手动触发 CI,获取实时最新数据。

一句话,最合适的方案不一定是最优的

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 Next.js 和云开发 CMS 的内容型网站应用实战开发
董沅鑫,云开发 CloudBase 团队研发工程师,侧重于前端工程化、node 服务开发,业余时间出没在 xin-tan.com。
腾讯云开发TCB
2020/06/03
5.5K0
云开发 For Web:一站式开发下一代 Serverless Web 应用
近两年来,Serverless 无疑是前端圈里最火热的话题之一,在各种技术峰会、各种技术文章里都能看到它的身影。如果你是一名前端开发者,一定很奇怪:
腾讯云开发TCB
2020/03/27
2.1K0
云开发 For Web:一站式开发下一代 Serverless Web 应用
如何在Vue中使用云开发的云函数,实现邮件发送
云开发的云函数能够让我们无需购买和管理服务器,就能够实现一些前端做不了,必须在服务端做的复杂操作,让我们大大降低了运维成本。本篇将会为您讲解,如何在前端主流框架Vue中使用云开发的云函数。 通过本篇您将可以学习到: 如何创建云开发环境 如何在Vue中使用云开发 如何在Vue中利用云开发的云函数,实现邮件的发送 1.创建云开发环境 打开云开发控制台地址:https://console.cloud.tencent.com/tcb,点击新建云开发环境 创建云开发环境 创建后进入控制台首页,复制环境ID保
腾讯云开发TCB
2020/09/14
3.9K0
【serverless实战】利用腾讯云·云开发实现短信验证码
最近支持了云开发的自定义短信验证码登录功能。第一次体会到利用云开发自身能力,开箱即用的快感。所有的精力集中在业务逻辑和数据库设计上,不用花费过多的精力浪费在运维上。
心谭博客
2020/05/06
3.6K0
【玩转腾讯云】 让开发变得简单
今年年初接触了云开发,这东西真香,减少了我们开发的繁琐和开发成本。它集成了云函数、云数据库、云存储等功能,使我们不必担心服务器运维、基础架构,只关心我们的业务逻辑即可,它让专业的人去干专业的事(比如运维交给腾讯云专业的人去做,我们不必担心)。这也让我们从开发成本上省出很多。并且我们开发应用可以快速上线!
XaDon
2020/04/20
1.2K0
【玩转腾讯云】 让开发变得简单
带你入门云开发实践总结篇
CloudBase 支持使用 .env 类型文件作为主要数据源,使用不同的后缀区分不同的阶段、场景,如 .env.development 可以表示开发阶段的配置,.env.production 可以表示生产环境的配置
前端进阶之旅
2022/07/29
6K0
带你入门云开发实践总结篇
简单几步,让微信小程序变身 H5 网页? | 云开发实战
我是 盛瀚钦,沪江 CCtalk 前端开发工程师,Taro 框架的 issue 维护志愿者,主要侧重于前端 UI 编写和团队文档建设。
腾讯云开发TCB
2020/03/31
6.8K0
简单几步,让微信小程序变身 H5 网页? | 云开发实战
CloudBase CMS + Next.js:轻松构建一个内容丰富的站点
试想一下,如果你现在要为你自己或者你所在的组织创建一个强内容的站点,同时要求好的 SEO(搜素引擎优化),比如博客,你会怎么做呢?
腾讯云开发TCB
2021/04/26
2.7K0
CloudBase CMS + Next.js:轻松构建一个内容丰富的站点
如何用云开发快速搭建实时 Todo List 应用
借助云开发数据库的实时推送能力和云开发官方出品的前后端一体化部署工具CloudBase Framework,可以轻松搭建一个完整应用。 效果展示 示例地址: http://cloud.qinmudi.cn/watch-todolist 1.开发前准备 1.1 腾讯云 CloudBase 的按量计费环境 我们要部署静态网站,因此,需要提前准备按量计费环境。 1.2 项目创建 使用 CloudBase Framework 创建一个 vue 应用。具体操作,参见:如何用 Cloudbase Fra
腾讯云开发TCB
2020/08/12
1.3K0
如何使用云开发进行图片上传
云开发,相信大家都不陌生,在我们的日常开发中,总少不了需要把图片进行上传的应用场景。
Doggy
2020/07/03
3.3K0
如何使用云开发进行图片上传
基于云开发 CloudBase 搭建在线视频会议应用教程
在线视频会议应用是基于浏览器的能力 WebRTC 以及 腾讯云开发 CloudBase 能力构建而成的应用. 在云开发的助力下, 一个复杂的在线会议应用, 一个人一两天即可完成.
腾讯云开发TCB
2020/11/17
2.2K0
基于云开发 CloudBase 搭建在线视频会议应用教程
基于云开发 CloudBase 搭建在线视频会议应用
「在线视频会议应用」是基于浏览器的能力 WebRTC 以及云开发 CloudBase 能力构建而成的应用,在云开发的助力下,一个复杂的在线会议应用,1人、1-2天即可完成搭建。 本应用用到的能力、工具、框架有: CloudBase Framework 用于项目基础目录结构生成, 一键部署 Simple Peer 流行的 WebRTC 库 云开发CloudBase - 云函数, 包括云函数的定时调用 云开发CloudBase - 数据库 云开发CloudBase - 静态网站托管 React Ant d
腾讯云开发TCB
2020/10/14
1.7K0
【玩转腾讯云】在云函数里为 Next.js 跑 SSR
很多时候我们都希望首屏速度快,SEO友好,那么相比于客户端渲染,SSR渲染将是这方面的优势。
XaDon
2020/04/12
3.4K0
【玩转腾讯云】在云函数里为 Next.js 跑 SSR
如何将数据从MySQL/MongoDB中迁移至云开发数据库
云开发为我们提供了一个 JSON 文档型数据库(NoSQL),并集成了增删改查等 API,操作方便,简单易懂。并且相比传统数据库而言它具有高性能的数据库读写服务,可以直接在客户端对数据进行读写,无需关心数据库实例和环境。云开发官方文档:https://cloud.tencent.com/product/tcbfrom=12763
腾讯云开发TCB
2020/06/17
4.3K0
如何将数据从MySQL/MongoDB中迁移至云开发数据库
【玩转腾讯云】云开发WEB入门实践
这个项目是我参加腾讯云云开发实战营【web云开发赛道-FILES存储】时开发的,因为网上云开发web实战很少,所以我整理了代码上传到GitHub上并写了这篇文章,通过这个项目你将学到以下功能:
王秀龙
2020/04/01
4.7K0
【玩转腾讯云】云开发WEB入门实践
【玩转腾讯云】万物皆可Serverless之在Flutter中快速接入腾讯云开发
本文将带领大家按照云开发的官方文档在Flutter中快速接入一下腾讯云开发SDK,
乂乂又又
2020/04/22
3.6K1
【玩转腾讯云】万物皆可Serverless之在Flutter中快速接入腾讯云开发
3步搞定图像盲水印?试试云开发扩展能力
云开发不仅支持多端(微信小程序、Web应用、APP应用、QQ小程序),更提供丰富的扩展能力!
腾讯云开发TCB
2020/04/09
9650
使用腾讯云开发来部署Svelte Sapper应用
Svelte是前端框架界新秀,以小巧、响应式、无virtual Dom著称,就像React有对应的SSR框架Next.js一样,Svelte也有自己官方的SSR 框架Sapper,也是小巧,灵活。
腾讯云开发TCB
2020/06/03
1.7K0
尝试云开发
在接触一个开源项目的时候,项目的后端采用的是云开发的模式(云函数,云数据库等等),本人又没接触过云开发,于是便有了这篇文章。
愧怍
2022/12/27
8210
尝试云开发
腾讯在线教育的小程序云开发实践
陈天忱,IMWEB团队成员,腾讯前端开发工程师, 主要负责腾讯课堂小程序,腾讯课堂直播间等业务模块。
腾讯云开发TCB
2020/06/09
6.3K1
推荐阅读
相关推荐
基于 Next.js 和云开发 CMS 的内容型网站应用实战开发
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验