是否有必要在SSR模式下使用Nuxt Server作为我的外部Django API和Nuxt 3前端之间的中介?

问题描述 投票:0回答:1

我正在开发一个 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/ 
来获取所有项目。

Nuxt 服务器集成:

Nuxt 服务器目录结构:

server/api/projects/index.ts
:指向 Django 端点
/api/projects/
以获取所有项目。
server/api/projects/[id].get.ts
:通过项目 ID 从
/api/projects/detail/${projectId}/
获取项目。

API交互逻辑:

这些端点在服务处理程序 (

api/projects.api.ts
) 中使用,该处理程序提供 getAllProjects、getProjectById 和 deleteProjectById 等功能。

可组合(
useProjects.ts
):

可组合的

useProjects.ts
使用
api/projects.api.ts
中的功能来管理项目数据并与
server/api/projects/
中的Nuxt服务器端点进行交互。它利用 TanStack Query 中的 useQuery 来实现高效的状态管理。

问题:

Nuxt 3 前端和外部 Django API 之间是否需要有一个中间 Nuxt 服务器?这是否为服务器端渲染(SSR)提供了任何特定的好处,或者 Nuxt 3 前端可以直接与 Django API 交互,同时保持 SSR 功能?

谢谢您的帮助!

应用结构:

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)。但是,我不确定这种方法是否有必要。

我尝试过的:

    我在 Nuxt 3 应用程序的 server/api 目录中创建了几个直接指向 Django API 端点的 API 端点:

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服务器端点交互。

我的期望:

由于更好的缓存和 SSR 优势而提高了性能。 由于 Nuxt 服务器充当前端和 Django API 之间的中介,因此增强了安全性。

实际发生了什么:

该设置工作正常,但它增加了架构的复杂性。 我不确定这个中间 Nuxt 服务器是否必要,或者 Nuxt 3 前端是否可以直接与外部 Django API 交互,同时保持 SSR 功能。 因此,我想确认这种方法是否为 SSR 提供了任何特定的好处,或者前端和 Django API 之间的直接连接是否足够。

django django-rest-framework nuxt.js
1个回答
0
投票
在服务器上获取数据并将其推送到客户端而不是在客户端获取数据(消除 JSON 开销)以及诸如此类的一些事情,可能会带来一些性能优势,因此可以提高性能。

另外,如果您使用 Nuxt 的
全静态模式(也可用于 Nuxt3),那么您可以跳过任何外部调用并在构建时对其进行设置。

因此,对 SSR 有所帮助,具体取决于您在应用程序中执行的操作。

可能带来一些好处,也可能根本没有好处。

增强安全性?恰恰相反。在水合过程和您在 Nuxt 中使用同构应用程序这一事实之间,与将 Django 和 Nuxt 分开相比,它可能会导致更多的泄漏。

如果好处很明显,您可以总体使用 Nuxt 的

server

 目录作为一些端点,但除此之外,除了调试复杂性之外,没有真正的好处,正如您猜对的那样。

如果您在 Nuxt 的服务器端进行一些繁重的输入,也许您可以看到一点。此外,您可能会更快地响应询问 Nuxt 的端点而不是您的端点,因为您将跳过真正的网络行程(只需在本地进行),但您还需要在 Nuxt 应用程序中提供可用的数据,所以也不是那么容易。


TLDR:将它们分开,并在特定情况下使用 Nuxt 的

server

 目录,具有明显的好处。

© www.soinside.com 2019 - 2024. All rights reserved.