在同一个域

时间:2015-10-06 09:16:09

标签: php angularjs api laravel gulp

因此,我试图构建2个单独的应用程序1,用作后端(Laravel作为REST API)和Angular应用程序作为客户端,最终这2个应用程序必须在同一个域中作为单个Web应用程序一起工作。< / p>

我想要完成的任务:

我的Angular应用程序是一个从index.html启动的单页面应用程序,所有路由都由Angular处理,除了应该由Laravel应用程序处理的/ api / *。 我使用2个不同的应用程序来构建更具动态性的Web应用程序,因此我可以轻松地更改我的后端框架和技术,并将每个应用程序作为一个独立的应用程序进行测试。更容易。 我不想在我的响应头中使用CORS,因为我的REST API仅用于我的Angular应用程序而不是其他应用程序,例如开发人员的api。 我想使用代理,将所有来自http://localhost:9100/api/ *的请求转发给:http://localhost:9000/api/ *

首先通过运行以下命令在端口9000上运行Laravel:

php artisan serve --port 9000

通过运行gulp任务(index.html在路径./src中)和端口9100下的Angular应用程序:

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的[errnoException(net.js:904:11)处连接ECONNREFUSED [as oncomplete](net.js:895:19)

我试图调查此问题的原因,有人说它连接到我的hosts文件,所以我不得不添加行: 127.0.0.1 localhost

但它不起作用。 我尝试了不同的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位。

1 个答案:

答案 0 :(得分:1)

您是否尝试使用http-proxy-middleware代替proxy-middleware

我在proxy-middleware时遇到了同样的错误。 (Gulp browser-sync - redirect API request via proxy

Error: connect ECONNREFUSED
    at errnoException (net.js:904:11)
    at Object.afterConnect [as oncomplete] (net.js:895:19)

结束创建http-proxy-middleware,解决了我的问题。

proxy-middleware不知何故在公司网络上无法运作。 http-proxy就是这么做的。 (http-proxy-middleware使用http-proxy进行实际代理)

猜猜你在使用gulp-webserver;代理可以添加如下:

var proxyMiddleware = require('http-proxy-middleware');

gulp.task('webserver', function() {
 gulp.src("./src")
    .pipe(webserver({
        port: 9100,
        livereload: true,
        open: 'http://localhost:9100',
        middleware: [proxyMiddleware('/api', {target: 'http://localhost:9000'})]
    }));
});

从未发现为什么在公司网络中使用代理中间件抛出此错误...

<强>更新

认为这个问题已经回答:

  

这是工匠服务器的问题,必须以这种方式运行:

     

php artisan serve --host 0.0.0.0

来源:

https://github.com/chimurai/http-proxy-middleware/issues/38

https://github.com/chimurai/http-proxy-middleware/issues/21#issuecomment-138132809