Grunt服务+ PHP?

时间:2014-04-28 14:06:57

标签: php angularjs gruntjs

我正在用yo + grunt + angular.js开始我的第一个项目 我有一个需要从我的服务器读取一些数据的服务;我使用angular $ http服务构建它。 我还构建了一个RESTful Web服务(用PHP实现,但它可能是Java,C,Perl,......,无关紧要),它公开了一个API来获取数据。
grunt为我的ng-app提供服务的服务器目前(并且可能永远都是)运行PHP Web服务的地方(通过apache)。

我想知道这是否是一个可接受的架构...我最终在同一台服务器上有两个不同的服务器(grunt和apache)...更多,我总是要添加一个“Access-Control-Allow-Origin: 127.0.0.1“到我的PHP服务的输出......: - (

例如,可以从grunt提供PHP吗?

更新:我谈到开发阶段......当然在制作时我不会使用咕噜声......
为了更好地解释自己,我想在$ http()中使用相对URL ...在开发阶段和生产阶段使用相同的代码...
如果在生产中我可以期望它能够工作,因为我只有一个服务器用于部署的Angular应用程序 PHP服务,当开发人员应该解释PHP时,当Grunt提供Angular应用程序时?咕噜咕噜?如果是,怎么样?

UDPATE 2,以及可能的解决方案:在对这个问题进行了相当多的思考(并且还阅读this文章),并且在这里没有得到满意的答案之后,我决定使用这种方法:

  • 开发
    • 使用“类似生产”的服务器(Apache,lighttpd,...)来提供真正的PHP页面 使用带有$ http或$ request的绝对URL来访问该服务器(不同于Grunt,它提供angular.js页面)。这些网址很容易配置,只需要最少的工作(以及可能的错误)即可切换到生产。
    • 在PHP脚本中,在生成(JSON)输出之前,始终输出正确的“Access-Control-Allow-Origin”标头;该指令的值也很容易配置。

  • 生产
    • 将angular.js应用程序部署到部署PHP的同一服务器上。
    • 更改网址,并使其相对,因为现在它们与客户端脚本共享相同的来源。
    • 更改“Access-Control-Allow-Origin”标题,仅允许本地请求(或者可能根本删除该标题...)。

如果有人想对此解决方案发表评论,提出异议或提出更好的解决方案,我会感到非常高兴......

3 个答案:

答案 0 :(得分:1)

我们在工作中解决问题的方法是在app文件夹中创建包含示例数据的平面文件,并使用$ resource和$ http的相对URL,然后将我们的代码部署为同一子目录级别的应用程序... / fx / api / fund例如。

这允许grunt提供一些静态的东西,用于查看Angular应用程序的设计,同时仍然提供完整的体验。然后我们有一个开发服务器,当我们提交代码(使用Jenkins)时我们可以检查实际功能并运行我们的测试套件。

这种方法有点笨拙,但它允许我们获得grunt方法的好处,并且仍然拥有测试服务器。我们的构建使用缩小版本,以便我们可以测试放大倍数不会破坏应用程序。

这种方法的唯一问题是带有grunt的内置Web服务器无法处理发布请求,因此调用帖子的任何内容都将失败。

答案 1 :(得分:1)

听起来你正在尝试和我做同样的事情。 (仅限本地开发的解决方案)

我正在使用yo angular来启动一个角度项目,但我想连接到一个php服务来提供一些内容。

我使用grunt-connect-proxy将我的帖子请求传递给apache。这很有效,除了在发送表单数据时$ _POST保持为空的事实,例如$http.post('/api',{"foo":"bar"})。我发布了一个关于此的问题,但它仍然没有解决,我无法弄清楚如何使这项工作。无论如何,另一个解决方案是将所有内容保存在同一个文件夹/域中。

那是我的故事

实际上故事有一个尾巴。 最后我找出导致问题的原因see this post

答案 2 :(得分:0)

在自己对这个问题做了很多考虑之后,没有得到满意的答案,我在此后提出了我的结论:

  • 开发
    • 使用"类似制作的"服务器(Apache,lighttpd,...)来提供真正的PHP页面 使用带有$ http或$ request的绝对URL来访问该服务器(不同于Grunt,它提供angular.js页面)。这些网址很容易配置,只需要最少的工作(以及可能的错误)即可切换到生产。
    • 在PHP脚本中,在生成(JSON)输出之前,始终输出正确的" Access-Control-Allow-Origin"报头;该指令的值也很容易配置。

  • 生产
    • 将angular.js应用程序部署到部署PHP的同一服务器上。
    • 更改网址,并使其相对,因为现在它们与客户端脚本共享相同的来源。
    • 更改"访问控制 - 允许 - 来源"标头,仅允许本地请求(或者可能根本删除该标头...)。