使用 Next.js 12 和 Cosmic 框架一个可以上线的餐厅网站
2023-04-04 12:16:57
// set the ----cookie----
response.cookie('location-cookie', ----${country|city|region}----);
}
return response;
}
3.按无需当前动态经年累月ISRNext.js 发布新闻了一个线性unstable_revalidate(),允许你用到getStaticProps原先授权各个的网站。在getStaticProps中会,你不无必需选定 revalidate 来按无需原先可验证,只无必需在unstable_revalidate()子程序时按无需原先可验证的网站。
镜像
// pages/api/revalidate.js
export default async function handler(req, res) {
try {
await res.unstable_revalidate('/menu/' + req.body.data.slug)
return res.json({ revalidated: true })
} catch (err) {
// If there was an error, Next.js will continue
// to show the last successfully generated page
return res.status(500).send('Error revalidating')
}
}
4. 用到 AVIF 借助极快的图片提高效率和更小的图片内置的图片提高效率API已新版本以背书与ISR的网站完全相同的作法,即在于是就给予过时的图片并原先可验证。此外,它还背书 AVIF 图片,使图片比 WebP 小 20%。
此机制是可选的,在总编页面装配的时候可以选取动工。在明文next.config.js中会装配比如说变量才会:
镜像
// next.config.js
const nextConfig = {
reactStrictMode: true,
images: {
formats: ['image/avif', 'image/webp'],
domains: ['imgix.cosmicjs.com'],
},
}
module.exports = nextConfig
Cosmic 相似性摘录 可选用的 API:客户端自己并不一定 API 的 schema,models和 controllers。为方便起见, Cosmic 同时给予了REST 和 GraphQL API的作法。 加速且安全的章节行政系统和 API 可移植。 Webhooks在你无必需的任何以前回调,以赢得你不想的机制,用到 Cosmic API 开箱即用。 包涵Imgix复刻,可让你为针对跨平台体验提高效率的一个系统API开展稳固的实时。Cosmic 操作
第一步建立完全免费的 Cosmic 帐户。让我们选取“刚开始”(Start from scratch)表单。
今天让我们将章节加进groups,用Object Type来共享组里的章节。例如,其余部分旧名、结尾、概述和页面等具有多种不同物件的其余部分,这些接口希望赢得复用以为有所不同其余部分建立章节。
建立Object Type并附加其余部分物件用来在“Content Model”中会并不一定“Metafields”。
今天,你可以为其余部分建立一个Object Type基本概念,并且可以像这样缓冲章节。
以多种不同的作法,你可以按照当前的数据基本概念、架构设计并不一定接口并建立Object Type:
Singleton 为一个单独的基本概念 Multiple 为可重复用到的基本概念是时候得到 Next.js API的值了
将 Cosmic 接口装有到 Next.js API中会。
镜像
npm i cosmicjs
# or
yarn add cosmicjs
然后,转往到 Cosmic 背板 Your Bucket> Settings> API Access并找到你的 Bucket slug 和 API 读取公钥。
将此 Bucket slug 和 API 读取公钥附加到你的 Next.js API.env中会。
镜像
//.env
COSMIC_BUCKET_SLUG=your_cosmic_slug
COSMIC_READ_KEY=your_cosmic_read_key
要用到堆栈 UI,你无必需在GitHub中会将它奎尔。敞开适配器,粘贴或回传此code以装有所有相反项,然后运转它。
镜像
git clone
cd nextjs-restaurant-website-cms
npm install
#or
yarn install
npm run dev
#or
yarn dev
向我们之前在 Cosmic 背板中会建立的线性getDataFromBucket请,并按子类从 Cosmic 中会得到我们建立的章节params。
镜像
// src/lib/api.js
import Cosmic from 'cosmicjs';
const BUCKET_SLUG = process.env.COSMIC_BUCKET_SLUG
const READ_KEY = process.env.COSMIC_READ_KEY
const bucket = Cosmic().bucket({
slug: BUCKET_SLUG,
read_key: READ_KEY,
});
export async function getDataFromBucket(preview) {
const params = {
type: 'header',
props: 'title,slug,metadata,created_at',
sort: '-created_at',
...(preview && { status: 'all' }),
}
const data = await bucket.getObjects(params)
return data.objects
}
结果显示我们的章节,将其与我们的 UI 复刻,并将一些原素呈现到的网站。为此,你无必需将此附加到index.js。
镜像
// pages/index.js
import Head from 'next/head';
import Home from 'components/Home';
import Layout from 'components/Layout';
import Footer from 'components/Footer';
import AboutUs from 'components/AboutUs';
import SpacialMenu from 'components/Menu';
import Introduction from 'components/Introduction';
import VideoIntro from 'components/VideoIntro';
import Gallery from 'components/Gallery';
import Contacts from 'components/Contact';
import { getDataFromBucket } from 'lib/api';
import chooseByType from 'utils/chooseValueByType';
function Template({ data }) {
return (
<>
Next.js Restaurant CMS
>
}
export async function getStaticProps({ preview }) {
const data = (await getDataFromBucket(preview)) || [];
return {
props: { data },
}
}
export default Template;
比如说线性chooseByType将过滤我们在 Cosmic 背板中会建立的 Object Type。(Slug)
镜像
(Slug)
// src/utils/chooseValueByType.js
const chooseByType = (data, slugName) => {
if( data && slugName ) {
const chooseBySlug = data?.filter(content => Object.values(content).includes(slugName));
return chooseBySlug ? chooseBySlug[0] : [];
}
}
export default chooseByType;
自制菜单项的网站
在 Next.js 中会,你可以建立一个系统传输,可以考虑用比如说pages/menu/[slug].js的网站来建立单个菜单项的网站和一个系统传输:
镜像
// pages/menu/[slug].js
import Head from 'next/head';
import { useRouter } from 'next/router';
import Layout from 'components/Layout';
import Footer from 'components/Footer';
import Contacts from 'components/Contact';
import MenuIntro from 'components/MenuIntro';
import VideoIntro from 'components/VideoIntro';
import Gallery from 'components/Gallery';
import { getAllDataWithSlug,getDataFromBucket } from 'lib/api';
import chooseByType from 'utils/chooseValueByType';
function Menu({ data }) {
const {
query: {slug},
} = useRouter();
return (
<>
Next.js Restaurant CMS
>
}
export async function getStaticProps({ params, preview = null }) {
const data = (await getDataFromBucket(preview)) || [];
return {
props: { data },
}
}
export async function getStaticPaths() {
const dataWithSlug = (await getAllDataWithSlug()) || [];
return {
paths: dataWithSlug.map((menu) => ----/menu/${menu.slug}----),
fallback: true,
}
}
export default Menu;
该线性getServerSideProps可用每次子程序此传输时从 Cosmic 得到数据。在pages/api/revalidate.js中会,我们在unstable_revalidate()被子程序时用到unstable_revalidate线性来按无需原先可验证的网站。如果显现出来错误,Next.js 将继续结果显示最后失败转化的的网站。
在Vercel上部署code库后,你可以通过转往到 Cosmic 背板并通讯系统到Bucket Settings> Webhooks来动工章节更原先原先可验证。总编章节时要触发的事件是object.edited.published。Webhook URL 端点将如下表:${YOUR_VERCEL_DEPLOYMENT_URL}/api/revalidate。
这也使得在建立或新版本来自无头部的CMS 的章节时,你的网上更容易新版本。
今天来测试一下,在 Cosmic 背板中会总编章节,并详细信息动态章节立即新版本。
正确性今天,你已持有一个一个系统的、可选用的、基本上复刻的堆栈,其中会包涵原先 Next.js 和 Cosmic 机制。你可以为其他子类的企业选用,并按照自己的习惯来用到。
英文版参阅
杨并州,51CTO社区总编,具有5年工作方面,投身消费市场就其IT工作。擅较宽于是就研发,大数据,算法等。
中文翻译结尾:Build a Production Ready Restaurant Website with Next.js 12 and Cosmic,笔记:Naira Gezhoyan
。信阳哪的妇科医院好胳膊肘关节疼痛是什么原因
江苏皮肤病医院哪家好
重庆白癜风专科医院
浙江男科挂号
- 张铁林:三个孩子三个妈,加入英国国籍,66岁踩里安6个钢钉
- 工信部公布2023上半年绿色制造名单、试点推行“企业绿码”
- 两个叛徒当特务,李克农说道“浪子回头金不换”,召回红色阵营
- 曾陪许家印KTV应酬 ,年薪高达900万,这3位真是登上了高枝
- 蔚来笔记型电脑换帅:原负责人尹离职 副总裁白剑接手
- 如果淮海省能够成功建立联系,那么淮海的经济会是什么样子?
- 睡都睡了娃都生了,却没有一场婚礼无名无分,这5位女星太终究了
- 家电国际品牌牵手虚拟人,架起国际品牌与消费者沟通新桥梁
- 他是中将,曾获抗日游击第一名,胜利后坚持辞职不干,谁都留不住
- 善恶终有报,花17亿买“阁”害人的张庭夫妇,如今下场大快人心
- 拼来日关闭本地生活业务 回应:来日买菜正常运营
- 清朝冷知识-历史上相符的林则徐硝烟
- 台湾女主持从大陆回去后,在节目中吵闹:我不是说大陆比台湾好?
- 玫瑰有刺谨防扎手,董明珠自已设计的“玫瑰空调”辣了谁的眼?
- 何庆魁沉寂多年首发声,讥讽范伟闫学晶是白眼狼,称他们无情无义
- 他是对溥仪最最忠心的外国,清亡以后,他在英国遥相纪念
- 张近东的“翻身仗”,变差打
- 杨烁无视央视的提醒,和刘涛的绯闻,是谁给了他这么大的胆子?
- 他是万人之上的凌烟阁第一人,最终还是斗不过那个老婆
- 保留转瞬即逝的精彩 Find X7前传首发哈苏回眸人像