我正在开发一个 SaaS 应用程序,使用带有
Django REST API
和 PostgreSQL
数据库的后端架构,而前端使用 Nuxt 3
以及 TypeScript
、Tailwind
和 TanStack Query
进行 API 请求管理。我通过在 nuxt.config.ts 文件中设置 ssr: true 来启用 Server-Side Rendering
(SSR):
export default defineNuxtConfig({
ssr: true,
})
在我当前的架构中,我的 Nuxt 3 应用程序中有一个
server/api/
目录,其中包含多个文件,这些文件代表与 Django API
交互的端点。例如,我有一个文件 server/api/projects/index.ts
指向 Django 端点 /api/projects/
来获取所有项目。
server/api/projects/index.ts
:指向 Django 端点 /api/projects/
以获取所有项目。
server/api/projects/[id].get.ts
:通过项目 ID 从 /api/projects/detail/${projectId}/
获取项目。
这些端点在服务处理程序 (
api/projects.api.ts
) 中使用,该处理程序提供 getAllProjects、getProjectById 和 deleteProjectById 等功能。
useProjects.ts
):可组合的
useProjects.ts
使用api/projects.api.ts
中的功能来管理项目数据并与server/api/projects/
中的Nuxt服务器端点进行交互。它利用 TanStack Query 中的 useQuery 来实现高效的状态管理。
问题:谢谢您的帮助!
应用结构:
frontend/
├─ api/ # Functions to call the API server Nuxt 3 (server/api/)
│ └─ projects.api.ts
├─ app.vue
├─ assets/
│ └─ css/
│ └─ tailwind.css
├─ composables/ # Composables to call functions in api/projects.api.ts
│ └─ useProjects.ts # and share data between components
├─ nuxt.config.ts
├─ pages
│ ├─ ecowall/
│ │ ├─ conception
│ │ │ └─ [projectId]
│ │ │ └─ paroi
│ │ │ ├─ [paroiId].vue
│ │ │ └─ new-paroi.vue
│ │ ├─ index.vue
│ │ └─ projects
│ │ ├─ [projectId].vue
│ │ └─ index.vue # I use my composables useProjects.ts here to get all projects
│ └─ index.vue
├─ plugins
│ └─ vue-query.ts
├─ server/ # Intermediary server to call the Django API endpoints
│ ├─ api/
│ │ ├─ projects/
│ │ │ ├─ [id].delete.ts
│ │ │ ├─ [id].get.ts
│ │ │ ├─ create.post.ts
│ │ │ └─ index.ts
│ └─ tsconfig.json
└─ tsconfig.json
我实现了一个中间 Nuxt 服务器来充当 Nuxt 3 前端和外部 Django API 之间的桥梁。我的期望是这个中间层将提高性能、确保安全性并增强服务器端渲染 (SSR)。但是,我不确定这种方法是否有必要。我尝试过的:
server/api/projects/index.ts
指向
/api/projects/
。
server/api/projects/[id].get.ts
指向
/api/projects/detail/${projectId}/
。
服务处理程序(api/projects.api.ts
),它提供了与这些 Nuxt 服务器端点交互的功能。
可组合(useProjects.ts
)来管理项目数据并通过TanStack Query与Nuxt服务器端点交互。
实际发生了什么:
另外,如果您使用 Nuxt 的
全静态模式(也可用于 Nuxt3),那么您可以跳过任何外部调用并在构建时对其进行设置。
可能带来一些好处,也可能根本没有好处。
如果好处很明显,您可以总体使用 Nuxt 的
server
目录作为一些端点,但除此之外,除了调试复杂性之外,没有真正的好处,正如您猜对的那样。如果您在 Nuxt 的服务器端进行一些繁重的输入,也许您可以看到一点。此外,您可能会更快地响应询问 Nuxt 的端点而不是您的端点,因为您将跳过真正的网络行程(只需在本地进行),但您还需要在 Nuxt 应用程序中提供可用的数据,所以也不是那么容易。
server
目录,具有明显的好处。