Grunt serve + PHP?


Grunt serve + PHP?

我正在用yo+grunt+angular.js开始我的第一个项目。
我有一项服务,需要从我的服务器上读取一些数据;我使用angular$http服务构建了它。我还构建了一个RESTful web服务(用PHP实现,但它可以是Java、C、Perl…,这无关紧要),它公开了一个API来获取数据
grunt为我的ng应用程序提供服务的服务器目前(而且可能永远)与运行PHP web服务的服务器(由apache运行)相同。

我想知道这是否是一个可以接受的架构。。。我最终在同一台服务器上拥有两个不同的服务器(grunt和apache)。。。此外,我总是要在我的PHP服务的输出中添加一个"Access Control Allow Origin:127.0.0.1"…:-(

例如,有可能从grunt提供PHP吗?

更新:我说的是开发阶段。。。当然,在生产中我不会用咕哝
为了更好地解释我自己,我想在$http()中使用相对url。。。在开发和生产阶段使用相同的代码
如果在生产中,我可以期待它的工作,因为我只有一个服务器用于部署的Angular应用PHP服务,当Angular应用由Grunt提供服务时,谁应该在开发中解释PHP?Grunt本身?如果是,如何?

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

  • 发展
    • 使用"类似生产"的服务器(Apache、lighttpd…)来为真实的PHP页面提供服务
      使用带有$http或$request的绝对URL访问该服务器(与Grunt不同,Grunt为angular.js页面提供服务)。url将很容易配置,只需要最少的工作量(以及可能的错误)即可切换到生产
    • 在PHP脚本中,在生成(JSON)输出之前,始终输出适当的"Access Control Allow Origin"标头;指令的值也很容易配置

  • 生产
    • 将angular.js应用程序部署到部署PHP的同一服务器
    • 更改url并使其相对,因为现在它们与客户端脚本共享相同的来源
    • 更改"Access Control Allow Origin"标头,只允许本地请求(或者可能完全删除该标头…)

如果有人想对这个解决方案发表评论、提出异议或提出更好的解决方案,我将非常高兴。。。

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

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

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

这种方法唯一的问题是,内置的带有grunt的web服务器无法处理post请求,因此任何调用post的操作都会失败。

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

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

我使用grunt连接代理将我的post请求传递给apache。除了$_POST在发送表单数据(例如$http.post('/api',{"foo":"bar"}))时保持为空这一事实之外,此操作效果良好。我发布了一个关于这个的问题,但它仍然没有解决,我不知道如何使它发挥作用。无论如何,另一种解决方案是将所有内容都保存在同一个文件夹/域中。

这就是我的故事

事实上,这个故事有一条尾巴。最后我发现了问题的原因,请参阅

没有收到令人满意的答案,在我自己思考了很多问题之后,我在下面给出了我的结论:

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

  • 生产
    • 将angular.js应用程序部署到部署PHP的同一服务器
    • 更改url并使其相对,因为现在它们与客户端脚本共享相同的来源
    • 更改"Access Control Allow Origin"标头,只允许本地请求(或者可能完全删除该标头…)