如果你没有使用Next.js但使用Netlify来托管你的网站,你可以将Tina后端部署为一个Netlify函数。这个函数将负责处理所有TinaCMS请求,包括GraphQL API、身份验证和授权。
如果你想查看Netlify函数的实际应用,请查看演示仓库
创建一个名为netlify/functions/tina.{ts,js}
的文件,并添加以下代码:
// netlify/functions/tina.{ts,js}import express from 'express'import type { RequestHandler } from 'express'import cookieParser from 'cookie-parser'import ServerlessHttp from 'serverless-http'import { TinaNodeBackend, LocalBackendAuthProvider } from '@tinacms/datalayer'import { AuthJsBackendAuthProvider, TinaAuthJSOptions } from 'tinacms-authjs'import cors from 'cors'import dotenv from 'dotenv'import { databaseClient } from '../../tina/__generated__/databaseClient'dotenv.config()const app = express()app.use(express.urlencoded({ extended: true }))app.use(cors())app.use(express.json())app.use(cookieParser())const isLocal = process.env.TINA_PUBLIC_IS_LOCAL === 'true'const tinaBackend = TinaNodeBackend({authProvider: isLocal? LocalBackendAuthProvider(): AuthJsBackendAuthProvider({authOptions: TinaAuthJSOptions({databaseClient,secret: process.env.NEXTAUTH_SECRET!,debug: true,}),}),databaseClient,})app.post('/api/tina/*', async (req, res, next) => {// 如有需要,修改请求tinaBackend(req, res, next)})app.get('/api/tina/*', async (req, res, next) => {// 如有需要,修改请求tinaBackend(req, res, next)})export const handler = ServerlessHttp(app)
由于Netlify Functions不支持全捕获路由,你需要在netlify.toml
文件中添加以下内容。
[functions]node_bundler = "esbuild"[[redirects]]from = "/api/tina/*"to = "/.netlify/functions/tina"status = 200force = true
接下来,确保更新你的TinaCMS配置以使用新的端点。
// tina/config.{js,ts}export default defineConfig({// 这是你的graphql端点的URLcontentApiUrlOverride: '/api/tina/gql',//...})
现在你可以使用netlify dev
命令在本地运行你的网站。