使用 Next.js 12 和 Cosmic 框架一个可以上线的餐厅网站
发布时间:2023-03-15
// 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
。长春生殖感染医院哪个好河北白癜风去哪看
潍坊专业的男科医院
上海专业男科医院哪家好
博士伦滴眼液治疗近视吗
-
新华全媒+|北京近期出台多项措施激发市场动感
新华社广州7同月12日电(路透社吉宁、罗鑫)短时间全面制订有助于购物了政府提振购物信心,收取购物券、支出催生购物气息……随着疫情风险评估形势不稳定的,首都广州的市场气息正在被展示出。
- 2025-05-17不退赛就是冠军!王曼昱4-2问鼎,怒吼庆祝,王艺迪方式在1金1银
- 2025-05-17数说华北地区|上半年我国民航完成旅客运输量1.18亿人次
- 2025-05-17@杨春,面向中小学生的全省性竞赛,今后“零收费”
- 2025-05-17第五人格:喧闹到的月亮河公园,小丑人格转变的授意所在
- 2025-05-17仙台维加泰VS长崎成功凑
- 2025-05-177月12日0-12时,新增2例本土确诊病例!珠海召开鼠疫防控新闻发布会
- 2025-05-17PA改回居然出女装克劳德了?
- 2025-05-17排列五第22194期
- 2025-05-17管道重击居民断水,消防车变身送水车
- 2025-05-173D 194期“火力Encore”推荐