【发布时间】:2015-10-06 09:16:08
【问题描述】:
所以我尝试构建 2 个单独的应用程序 1 作为后端(Laravel 作为 REST api)和 Angular 应用程序作为客户端,最终这 2 个应用程序必须在同一个域下作为单个 Web 应用程序一起工作。
我想要完成什么:
我的 Angular 应用程序是一个从 index.html 启动的单页应用程序,所有路由都由 Angular 处理,除了 /api/* 应该由 Laravel 应用程序处理。 我使用 2 个不同的应用程序来构建更具动态性的 Web 应用程序,因此我可以轻松更改我的后端框架和技术,并更轻松地将每个应用程序作为“独立”测试。 我不想在响应标头中使用 CORS,因为我的 REST API 仅服务于我的 Angular 应用程序,而不是其他应用程序,例如开发人员的 api。 我想使用代理将来自http://localhost:9100/api/* 的所有请求转发到:http://localhost:9000/api/*
首先我通过运行在端口 9000 上运行 Laravel:
php artisan serve --port 9000
通过运行 gulp 任务在 9100 端口下的 Angular 应用程序(index.html 在路径 ./src 中):
gulp.task('webserver', function(){
connect.server({
root: './src',
port: 9100,
middleware: function(connect, o) {
var url = require('url');
var proxy = require('proxy-middleware');
var options = url.parse('http://localhost:9000/api');
options.route = '/api';
return [proxy(options)];
}
});
});
这两个应用程序都可以完美地独立运行,但是当我尝试导航到: http://localhost:9100/api/v1/comments我收到以下错误:
错误:在 Object.afterConnect [as oncomplete] (net.js:895:19) 处的 errnoException (net.js:904:11) 处连接 ECONNREFUSED
我试图调查这个问题的原因,有人说它连接到我的主机文件,所以我不得不添加以下行: 127.0.0.1 本地主机
但它不起作用。 我尝试了不同的 gulp 任务:
gulp.task('webserver', function() {
gulp.src("./src")
.pipe(webserver({
port: 9100,
livereload: true,
open: 'http://localhost:9100',
proxies: [
{
source: '/api', target: 'http://localhost:9000/api'
}
]
}));
});
我收到完全相同的错误...
我的开发环境是 Windows 10 x64 位。
【问题讨论】:
-
你说 laravel 在 9000 端口上运行,为什么它会响应:localhost:9100/api/v1/comments 或者这也是你的 Angular 站点中的一个 url?
-
因为我添加了一个代理,并且当我向 localhost:9100/api/v1/cmets 发送 http 请求时,理论上我应该从 localhosy:9000/api/v1/cmets 得到响应,我会这是因为我需要 2 个不同的应用程序在同一个域下运行,这是我知道的唯一方法......我的 Angular 应用程序在端口 9100 上运行。
标签: php angularjs api laravel gulp