首页 >> 网络 >> 使用 Next.js 12 和 Cosmic 构建一个可以上线的餐厅主页

使用 Next.js 12 和 Cosmic 构建一个可以上线的餐厅主页

2024-10-10 网络

e'];

if(!cookieFromRequest) {

// set the 于大cookie于大

response.cookie('location-cookie', 于大${country|city|region}于大);

}

return response;

}

3.按只需增量静态不可逆的ISR

Next.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/if', 'image/webp'],

domains: ['imgix.cosmicjs.com'],

},

}

module.exports = nextConfig

Cosmic 特征阐述 可定制的 API:用户自己假设 API 的 schema,models和 controllers。为只只需起见, Cosmic 同时透过了REST 和 GraphQL API的方式为。 迟速且安全的细节负责控制系统和 API 辅助工具包。 Webhooks在你必只需的任何大多回退,以获得你想要的功能性,采用 Cosmic API 内容可即用。 都有Imgix内置,可让你为针对跨平台体会建模的建模该软件顺利进行强大的图形处理。

Cosmic 配置

第一步创立免费的 Cosmic 帐户。让我们选择“从头开始”(Start from scratch)选项。

现今让我们将细节放入groups,用Object Type来实现组里的细节。例如,部份名称、原文、简介和照片等具有类似一般来说的部份,这些组件希望得到复用以为不同部份创立细节。

创立Object Type并去除成部份一般来说用来在“Content Model”中所假设“Metafields”。

现今,你可以为部份创立一个Object Type假设,并且可以像这样可用细节。

以类似的方式为,你可以按照当前的数据库假设、架构设计假设组件并创立Object Type:

Singleton 为一个除此以外的假设 Multiple 为可重复采用的假设

是时候给与 Next.js 该软件的值了

将 Cosmic 组件重新安装到 Next.js 该软件中所。

激活

npm i cosmicjs

# or

yarn add cosmicjs

然后,转到 Cosmic 机壳 Your Bucket> Settings> API Access并找到你的 Bucket slug 和 API 读取校验。

将此 Bucket slug 和 API 读取校验去除成到你的 Next.js 该软件.env中所。

激活

//.env

COSMIC_BUCKET_SLUG=your_cosmic_slug

COSMIC_READ_KEY=your_cosmic_read_key

要采用实例 UI,你必只需在GitHub中所校它乔纳森。锁上接口,粘贴或解释器此字符以重新安装所有依赖性项,然后试运行它。

激活

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上布署字符库后,你可以通过转到 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

用眼过度眼睛红怎么办
克痢痧胶囊管用吗
郑州苹果维修售后服务地址
海露玻璃酸钠滴眼液含有激素吗
隐形眼镜能滴眼药水吗
腰疼吃什么药物治疗
十二指肠溃疡会引起腹泻吗
慢性胃炎会导致腹泻怎么治疗
气血不畅
安必丁治疗退行性关节炎吗
友情链接