Loving Tina? us on GitHub0.0k

文档

学习

v.Latest
Documentation
在Netlify Functions上托管Tina后端
目录

如果你没有使用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 = 200
force = true

接下来,确保更新你的TinaCMS配置以使用新的端点。

// tina/config.{js,ts}
export default defineConfig({
// 这是你的graphql端点的URL
contentApiUrlOverride: '/api/tina/gql',
//...
})

现在你可以使用netlify dev命令在本地运行你的网站。

上次编辑: September 4, 2024