我应该将 Angularjs 文件保存在我的 Web 应用程序中的啥位置,我应该如何构建我的路由和资源? [关闭]

Posted

技术标签:

【中文标题】我应该将 Angularjs 文件保存在我的 Web 应用程序中的啥位置,我应该如何构建我的路由和资源? [关闭]【英文标题】:Where should I keep the Angularjs files in my web application and how should I structure my routes and resources? [closed]我应该将 Angularjs 文件保存在我的 Web 应用程序中的什么位置,我应该如何构建我的路由和资源? [关闭] 【发布时间】:2014-11-26 05:26:46 【问题描述】:

我正在使用 Laravel 构建一个 RESTful Web 服务,并在前端使用 Angluarjs 构建一个单页应用程序。现在我应该在哪里放置 Angularjs 文件?我应该将它们放在 Laravel 安装的公用文件夹中,还是应该将它们完全分开,因为我将调用 Web 服务中的资源,它会返回 JSON 数据,因此不需要它们同一个地方。标准或最佳做法是什么?

现在,第二部分。如果我正在构建一个简单的 Todo 应用程序,我应该如何在 Laravel 中管理我的路由和资源。这是我真正感到困惑的地方,有点难以解释,但请陪我一分钟。例如,我在 /users 有一个用户资源,我可以通过在 /users 发出 GET 请求来获取所有用户,或者通过在 /users 发出 POST 请求来创建新用户。同样,我可以在 /users/1 发出 GET 请求并获取第一个用户,依此类推,并使用其他请求动词。现在,我有另一个资源,称为任务。我应该如何实现这个资源?我应该像嵌套资源说 /users/user_id/tasks 那样实现它吗?当我在 /users/1/tasks 发出 GET 请求时,它将获取第一个用户的所有任务。但是现在它变得复杂了,因为如果在 /users/10/tasks/1 发出 GET 请求,它是否应该为第 10 个用户获取第一个任务。但是这样一个逻辑的实现变得非常困难,因为我必须寻找第 10 个用户的第一个任务。

我想出了一个解决方法,只在 /users/user_id/tasks 设置一个 GET 路由,这显然会返回指定用户的所有任务。然后我会创建一个完全不同的资源/任务来处理所有其他请求动词。我这样做对吗?

如果我使用像 MongoDB 这样的 NoSQL DB,在这种情况下,数据将以 /users/user_id/tasks/task_id 不会难以实现的方式存储,因为任务每个用户都将在他们自己的 JSON 对象中。

我的想法是否正确?我是新手,我不完全知道解决此类数据库架构问题的标准方法是什么?最佳做法是什么?

【问题讨论】:

将 angularjs 文件和 Laravel 文件分开保存,这样您的应用程序的耦合度就会降低。此外,如果您需要部署多个前端服务器以实现可扩展性,您可以轻松完成。它还有其他几个优点。 这要么过于宽泛,要么主要基于意见。专注于一个问题。 “我应该把 AngularJS 文件放在哪里?” “什么是标准或最佳实践”? “如果我正在构建一个简单的应用程序,我应该如何管理我的路线?” “我这样做对吗”? “还有,如果我使用的是 NoSQL DB 怎么办?” “我想的方向对吗?” “解决此类数据库架构问题的标准方法是什么?最佳实践是什么?”问题太多,注意力不够,征求意见。 【参考方案1】:

我应该将它们放在 Laravel 安装的公共文件夹中还是应该完全保留它们 分开,因为我将调用 Web 服务中的资源并且它会返回 JSON 数据,因此无需将它们放在同一个位置。

首先,由于Same Origin Policy,您应该将Angularjs文件放在公共文件夹中。 如果你想把它放在另一个 ip:port 中,那么应该使用 JSONP 而不是 JSON。 (related)

现在,第二部分。

您走在正确的道路上吗?这是一个见仁见智的问题。试点。并自己决定。在我看来,在设计方面没有最佳实践取决于用例。

不管怎样,我认为你的方法是不对的。您要打开用户列表吗?不!另一种选择是向名为“所有者”的任务添加一个字段,并匹配登录用户。

要保持 RESTful,您可以使用 token or cookie 在不使用会话的情况下发送用户信息。

【讨论】:

【参考方案2】:

这是我的建议。

基本上,您需要将应用程序划分为模块。例如说登录、功能 1、功能 2 等。现在您应该为每个模块创建一个文件夹,您可以在其中保存与其相关的所有文件(controllers.js、services.js、index.html、style.css、filters.js 和 [name of module].js) 这样您就可以分离所有代码,从而可以移动您的代码。

您可以将模块定义为:

(function () 
    'use strict';
    angular
        .module('myapp.login', [
            'myapp.login.controllers',
            'myapp.login.services'
        ]);
());

而且你需要在 app.js 中包含这个,像这样

angular
    .module('myapp', [ 'ngRoute',
    'ngResource',
    'myapp.login'
])

这样您可以添加所有模块。

您想要包含的另一个重要文件夹是公共文件夹。您可以在其中包含应用程序中可能拥有的所有可重用组件的模块。

对于测试,您可以有一个单独的测试文件夹,其中包含(e2e 和单元文件夹)。我一直在使用 cucumber 进行测试,并创建了 features 文件夹,在其中为我定义功能的每个模块创建文件夹。您还可以创建一个名为 steps 的文件夹,您可以在其中为每个模块创建单独的 js 文件。

在它之上,您可以拥有配置文件,您可以在其中为所有 api 创建变量,以便您可以从一个地方控制它。

希望这会有所帮助:)

【讨论】:

【参考方案3】:

第一部分

这取决于你。如果您不想让原始组件公开可见,请将它们放在公共目录之外的单独目录中。

第二部分

我的意见是你应该创建两个资源 URI——“/users”和“/tasks”。将它们视为多对多实体以供将来扩展。这样,您还可以将任务分配给多个用户。例如,您和您的合作伙伴共享的“电费支付”。

要让所有用户使用 PARAM tasks=null 向“/users”发出 GET 请求。要将所有用户链接到一组任务,请使用 PARAM tasks=逗号分隔的 taskIds> 获取 /users。 GET /users/user_id 以用户详细信息和相关任务进行响应。要创建一个或多个用户,请 POST 到“/users”。

同样,要获取所有任务,请向“/tasks”发出 GET 请求,其中 PARAM users=null。要获取链接到一组用户的所有任务,请使用 PARAM users=逗号分隔的 userIds> 获取 /tasks。 GET /tasks/task_id 将响应任务详细信息和相关用户。要添加一项或多项任务,请 POST 到“/tasks”;可选地发送 users=逗号分隔的 userIds> 否则假定当前用户在服务器端。

要在现有任务和用户之间建立关系,请使用 PUT /tasks/task_id 和 PARAM users=逗号分隔的 userIds>

【讨论】:

以上是关于我应该将 Angularjs 文件保存在我的 Web 应用程序中的啥位置,我应该如何构建我的路由和资源? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 angularjs-nvd3 图表导出到文件

AngularJS、NodeJS:将数据保存到 Json 文件或数据库

FCM 令牌 - 我应该何时将其存储/保存在我的数据库中?

为啥我应该在 AngularJS 中使用隔离范围指令?

AngularJS 与 PHP:为啥我的应用程序无法保存输入文本发送的字符串?

我在哪里将我的亚马逊 .pem 文件保存在 Mac 上