2015-10-06 51 views
0

所以即时尝试构建2个独立的应用程序1作为后端(Laravel作为REST api)和Angular应用程序作为客户端,最终这2个应用程序必须一起工作与单个网络应用程序相同的域。在同一个域下运行AngularJs和Laravel应用程序

什么即时试图完成:

我的角度应用程序是从index.html的引导单页的应用程序,所有的路由都通过角,除了处理/ API/*应通过Laravel应用程序处理。 即时通讯使用2个不同的应用程序,以建立更加动态的网络应用程序,所以我可以轻松地更改我的后端框架和技术,并将每个应用程序作为“独立”更容易地测试。 我不想在我的响应头中使用CORS,因为我的REST API只服务于我的Angular应用程序,而不是其他应用程序,例如开发人员的API。 我想使用代理,将转寄所有的请求都来自http://localhost:9100/api/ *到:http://localhost:9000/api/ *

首先IM运行在端口9000上运行Laravel:通过运行一饮而尽

php artisan serve --port 9000 
下端口9100

和角度的应用任务(的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我收到的F ollowing错误:

错误:在errnoException连接ECONNREFUSED(net.js:904:11)在Object.afterConnect [按的onComplete](net.js:895:19)

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

但它不工作。 我尝试了不同的任务,一饮而尽:

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。

+0

你说laravel运行在9000端口为什么它会回应: http:// localhost:9100/api/v1/comments 或者是你的角度网站的网址也是? – Pitchinnate

+0

,因为我添加了一个代理,当我发送一个http请求到localhost:9100/api/v1/comments时,理论上我应该从localhosy:9000/api/v1/comments得到回应,我这样做是因为我需要2个不同的应用在我知道的唯一方式下运行相同的域...我的角度应用程序运行在端口9100. – Lihai

回答

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莫名其妙地没有在公司网络上工作。 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'})] 
    })); 
}); 

从来没有发现为什么这个错误是在企业网络中使用代理中间件抛出...


更新:

认为这个问题已经有了答案:

It was a problem with the artisan server, had to run it this way:

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

+0

它也不工作,即时通讯接收未解决的错误:[HPM]代理错误:ECONNREFUSED。 undefined - >“localhost:9000/api/v1/comments” 在控制台中。并在浏览器中显示以下错误:“尝试代理到:localhost:9000/api/v1/comments时发生错误”。完全控制台输出:[21:16:02]启动'webserver'... [HPM]代理创建:/ api/v1 - > http:// localhost:9000/api/v1 [21:16:02] Web服务器在http:// localhost:9100开始 [21:16:02] 9.33 ms后完成'webserver' [HPM]代理错误:ECONNREFUSED。 undefined - >“localhost:9000/api/v1/comments” – Lihai

+0

我根据这个问题找到了原因:https://github.com/chimurai/http-proxy-middleware/issues/21我不得不跑Laravel带有'主机'标志的服务器。然而,即时通讯从Laravel收到错误:“NotFoundHttpException”当我导航到:localhost:9100/api/v1/comments – Lihai

+0

也许设置'changeOrigin'为'true'可能有助于 'proxyMiddleware('/ api',{target :'http:// localhost:9000',changeOrigin:true}' – chimurai

相关问题