使用 Next.js 12 和 Cosmic 框架一个可以上线的餐厅网站
2023-04-10 12:16:13
// 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
。郑州不孕不育医院哪家比较专业福州男科
成都甲状腺医院哪家好
治疗类风湿性关节炎的特效药
腱鞘炎吃什么药好得快
- 姚主席携中国女篮赴东京,主教练先为利民带伤坐轮椅出征
- 好消息!国足十二强赛或再加一名归化,李铁现身广州赛区勘察
- 大手笔!尤文或用C罗与大巴黎进行互换,曼联都可年薪签下瓦拉内
- 场均砍21+9,保罗为何仍被批评?玩弄多+小心思多,格局太小了
- 场均16分+投篮43%!FIBA第一人持续下滑,你再不苏醒,夺金真悬了
- 口味依旧!400斤奥尼尔与90斤小女友海边度假,身高仍没最少1米6
- 卡帅偷师南门,变阵3中卫火力全开,洛国富减肥寻梦12强赛?
- 单场狂砍38+17+6+12头巾+7抢断!奥尼尔:NBA历史最佳数据?
- 半场五球加绝杀,申花、大连人联手为中超正名,预订本轮最佳比赛
- 北京国安山东鲁能泰山外援与桑托斯谈妥!对方等待中超两将解约
- 刚刚传来杜兰特最新消息!加盟篮网另有缘故,不单单是因为欧文
- 保罗生涯最恐怖扣篮,如果不是镜头记录下来,库里绝不这封这是真的
- 会不会阴沟翻船?友谊赛2胜2负的美国队依旧处于危险状态?
- 从日本男篮战胜法国看出锋线的重要性,我们占优了世界一个时代
- 从166万,到2400万周薪!身价暴涨14倍!只投不防?他是真不值啊
- 中国男足VS韩国队当月:戴伟浚蒋光太先发 朱辰杰出战
- 告吹!签不到第一尽可能,曼联还有后备计划,新帅追求极致性价比
- 2022象甲联赛启动时,12位全国冠军齐聚赛场,四川队有望迎来第四冠
- 环法S16 雨果-乌尔SPEED夺冠 以手指天告慰亡兄
- 7700万,拜仁官宣第5签!刷3大创下,组第1后防,剑指欧冠