问题标签 [web-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
369 浏览

progressive-web-apps - PWA - 渐进式 Web 应用程序架构

我一直在研究有关 PWA 的事情(链接https ://www.youtube.com/watch?v=LaS_5jUeh_0 ),它确实提到了一些叫做“App Shell 架构”的东西,

我的不确定性:

  1. 渐进式 Web 应用程序能否支持其他架构,例如 MVC?还是为了实现 PWA 功能,我们需要将旧架构更改为为 PWA 设计的架构?

  2. 我们是否有可能继续使用我们熟悉的架构(在我的例子中:MVC 架构)来实现 PWA?

0 投票
3 回答
414 浏览

javascript - JAMstack 博客的最佳实践?

我想利用JAMstack架构编写一个网站,并包含一个博客页面(动态内容以缓慢的间隔更新)。我对如何以符合 JAMstack 的方式实现它有点困惑。

我查看了基于 JAMstack 构建的 React Static 模板,他们建议将博客文章存储在 Web 服务上,并在构建时通过 API 访问它们。这对我来说是有道理的(因为 JAMstack 文档提倡使用 API),但这意味着我必须编写自己的 Web 服务,该服务只能由我自己的网站使用,并且只能在构建时使用,所以这似乎是浪费资源和时间。

我的另一个想法是将博客文章存储在与我的网站相关的某个地方并直接导入它们。这样我就不会做任何不必要的事情。

您会推荐哪种方法,为什么?另外,如果我静态存储我的数据,我应该将它包含在我的 Git 存储库中吗?我将如何在不完全弄乱我的项目的情况下实现像 RSS 接口这样的扩展?

0 投票
1 回答
698 浏览

node.js - 将 React 前端添加到现有 Node.js / Express REST API 后端的最佳方法

我有一个使用 node.js/express 编写的带有 REST API 的现有后端。我可以调用 url,例如 /getallhouses 并获取相应的 JSON 对象。使用移动应用程序,这相当简单,因为您只需调用 REST API 并处理数据。由于我还需要添加一个 web 应用程序,例如使用 React.js,它似乎更加模糊。

实施此 webapp 策略的最佳方法是什么?

创建一个独立的 react.js 应用程序,该应用程序将首先由用户调用,然后像移动应用程序一样使用 REST API 并将该 react.js 应用程序托管在不同的服务器上?还是从现有的 express/node 后端开始并通过以下方式提供初始 index.html 文件是否更好

并将所有与 react.js 相关的代码放入视图中,并让后端为用户提供所需的 react.js 应用程序?

0 投票
0 回答
415 浏览

web-applications - 现代网络应用架构

美好的一天,Stackoverflow 社区。

我对可扩展 Web 应用程序设计/开发的当前最佳实践有点脱节。这更像是寻求帮助以指明正确的方向。

我正在计划在前端使用 React.js 的应用程序。关于如何构建应用程序的其余部分,仍然有很多阴暗/灰色区域。例如,经过一些研究,我发现有一些建议可以执行以下操作:

  • React(或 Angular)前端在 Node/Express 服务器上运行
  • 同一台服务器使用 ACL 管理用户身份验证
  • 用户数据存储在 MongoDB(或任何其他轻量级)中,可从前端服务器直接访问
  • API 在任何其他框架(Java、Go、Python 等)上单独运行,但在同一个域上(例如 api.something.com)
  • API/应用程序数据存储在单独的数据库中(Mongo、Postgress、MySQL、Oracle 等)
  • 所有第 3 方 API 服务均通过 API 进行管理

我还应该考虑什么,是否有资源可以指导我完成最佳的全栈架构模式?我知道有很多资源,但现在是 2018 年中期,很多模式都发生了巨大的变化。

提前致谢!

0 投票
4 回答
1228 浏览

amazon-web-services - 在 AWS 应用程序 LB 之上添加 AWS Cloudfront 有什么好处?

我参加了 AWS 培训,他们向我们解释说,一个好的做法是通过 Cloudfront 缓存所有动态内容,将 TTL 设置为 0,即使负载均衡器前面有一个 LB。所以它可能是这样的:

我看不到这种架构的任何优势,而不是直接拥有(仅适用于动态内容):

我不明白这一点,因为 Cloudfront 将始终将所有流量发送到 LB,因此您将拥有:

  • 两个 HTTPS 协商(客户端 <-> Cloudfront 和 Cloudfront <-> LB)
  • 完全没有缓存(它是动态内容,不应该被缓存,因为这就是“动态”的意思)
  • 您将没有客户端 IP,因为您的 LB 只会看到 Cloudfront IP(我知道这可以修复,以获得客户端 IP,但是您将遇到下一个项目符号的问题)。
  • 作为一项额外的工作,您需要能够经常更新您的 LB 安全组,以匹配 CloudFront IP(对于该区域),因为我猜您只想从您的 Cloudfront 获取流量,而不是直接从 LB 公共端点获取流量.

所以,可能,我错过了关于这个Route 53 -> CloudFront -> Application LB架构的一些重要的东西。

有任何想法吗?

谢谢!

0 投票
1 回答
157 浏览

node.js - 基于访问域的Nodejs数据库配置

我有两个域abc.comxyz.com指向同一个 NodeJS 服务器。基于域,我想加载将持续存在于该域的配置,即xyz.com我想连接到Database1abc.com我想连接到Database2

我该怎么做呢?甚至有可能或建议这样做吗?

我首先通过从req.hostname. 有没有更好的方法来做到这一点?

建筑学

0 投票
1 回答
42 浏览

reactjs - 具有任意多个子级的 React 父组件如何在不使用 useRef 的情况下通过其字符串 id 更新选定的子级?

我有一个名为 List 的 React Hook 组件,例如具有任意数量的子项,称为 Entry(可以添加或删除)。如果条目的数据发生更改,我如何在不重新渲染父级的情况下更新它,这将重新渲染其所有可能很大的兄弟姐妹。我想避免 useRef 和 useImperativeHandle,首先因为我的代码变得更加复杂,并且使用 react-sortable-hoc 使得无法使用它们。

0 投票
0 回答
13 浏览

amazon-web-services - 对于具有高可用性的系统,我应该使用 AWS 中的哪些服务组合?

我们正在构建一个无服务器系统。现在我们使用的是 Cognito 用于用户身份验证,S3 用于静态存储,API 网关,Lambda 函数和 Aurora Serverless 用于该系统。这个系统很简单,它包括用户注册,没有搜索,没有加入查询。我想知道我还能做些什么来提高可用性。

0 投票
1 回答
61 浏览

frontend - 构建仪表板的最佳方法是什么?

让我先简单解释一下这个问题。我最近开始涉足网络开发。我知道现代 MVC 体系结构的位和字节,并且已经在使用它。但是现在我打算建立一个仪表板,我对如何去做感到困惑。

传统的数据流是,它从后端的数据库中加载,稍加处理并作为响应发送到前端。这就是我到现在为止的工作。

但是谈到仪表板,假设应该在仪表板上显示的数据需要太多的处理。就像假设仪表板显示该人到目前为止已经花费/赚了多少钱。

现在,添加一些背景上下文。如果该应用程序是关于显示该人到目前为止在在线购物网站上花费了多少,则可能不需要太多处理。加载数百条记录可能没问题(也许!)。

但是,如果仪表板是关于显示盘中交易者到目前为止(自从他/她加入以来)已经花费/赚取了多少,那就太重了。在这种情况下,加载数万条记录并计算(加/减)将导致服务器负载。

在这种情况下,我正在考虑为报告创建一个单独的表格,该表格会在必要时更新(例如:当用户执行新交易时)。然后简单地读取数据并将其发送到前端。此外,如果需要,可能会进行一些处理,但所有繁重的工作都已经完成。

这两个例子可以分为两类:

  1. 实时处理
  2. 提前处理

现在,我的问题是,“我应该总是使用第二种方法吗?” 我有这个问题是因为如果处理太少,那么为报告创建单独的表格只是浪费存储。所以,我能想到一些取舍。

现在,进入这个问题的第二部分。这部分是指我应该如何在前端处理数据更改。三种可能的方式是:

  1. 定期更改(如果数据更新频率较低,则可以)
  2. 即时/实时更改(可能使用数据流之类的东西?)
  3. 即时/实时更改,但仅将更新(发生的新更改)而不是整个数据发送到前端

现在,谈谈我对这部分的看法。如果数据更改的频率较低,即一天一次,则可以采用第一种方法。但我仍然不知道第二个和第三个。另外,我应该使用数据流吗?谁能提供一些关于流与正常请求-响应周期有何不同的见解?我认为这可能与 websockets 或类似的东西有关,但我不知道。

PS:我目前使用 Django 作为我的后端,并计划使用 React/Vue 或类似的框架作为我的前端。(答案将与此无关,但仅供参考)

0 投票
2 回答
38 浏览

laravel - 仅仅为了避免 REST 反模式而为基本相同的逻辑定义两个单独的 API 端点?

假设我们在项目管理 SaaS 中的User模型和模型之间存在 M:M 关系。Project自然地,我们有一个将用户映射到项目的数据透视表。如果用户离开或项目经理将该用户从项目中删除,则删除条目。

即使最终结果基本相同(即条目被删除),我想通过定义两个单独的 API 端点来区分这两个操作会更好,如下所示:

用户离开项目

路线DELETE /users/{id}/projects/{id}

UserProjectController@destroy($id)$id项目的行动

项目经理删除用户

路线DELETE /projects/{id}/participants/{id}

ProjectParticipantController@destroy($id)$id用户的动作

我应该忽略 Cruddy by Design 和 RESTful 设计原则,leave() join() remove()而是简单地定义动作并在 URI 中使用动词吗?像这样:

POST /projects/{id}/join

POST /projects/{id}/leave

POST /projects/{id}/participants/{id}/remove