前端+后端:koa-proxy错误404

时间:2017-09-19 14:34:27

标签: angularjs node.js proxy koa

我有一个Node应用程序作为后端,我想用AngularJs前端连接它。他们坐在同一个仓库下,放在不同的文件夹上。我的节点应用程序运行正常,我可以使用Postman和浏览器与它进行交互。

我选择了代理方法,创建了一个简单的Node应用程序,使用koa为后端提供服务,如下所示:

module.exports = (function () {
  'use strict';

  var koa = require('koa');
  var serve = require('koa-static');
  var proxy = require('koa-proxy');
  var logger = require('koa-logger');
  var app = new koa();

  app.use(logger());

  app.use(proxy({
      host: 'http://0.0.0.0:8080/',
      match: /^\/api\//
  }));

  app.use(serve('./app'));

  app.listen(8000);

})();

我们的想法是将针对/media发出的所有请求代理到后端。 AngularJS代码如下所示:

'use strict';

angular.module('myApp.polls', ['ngRoute', 'ngResource'])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/polls', {
    templateUrl: 'polls/polls.html',
    controller: 'PollsCtrl',
    controllerAs: 'vm'
  });
}])

.controller('PollsCtrl', ['$resource', function($resource) {
  var vm = this;

  vm.polls = [];

  function getPolls() {
    $resource('/api/polls').query({}, {}).$promise.then(
      (polls) => {
        vm.polls = polls;
      },
      (error) => {
        console.log(error);
      }
    );
  }

  getPolls();
}]);

但是当我加载页面时,我在控制台上获得了404:

angular.js:12701 GET http://localhost:8000/api/polls 404 (Not Found)

我的后端应用程序没有得到任何回复。我尝试将代理配置上的主机更改为虚拟内容并获得了不同的错误,确认请求已被代理。

那么,我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

我的问题确实是404.我错过了在我的后端应用程序中添加一个记录器,因此我不知道它正在产生404。

直到那时我才注意到转发的请求仍然有/api路径,后端没有提供该路径。所以,我只需要将所有/api次呼叫重定向到正确的呼叫,问题就消失了:

app.all(/^\/api/, function(req, res) { 
  res.redirect(req.originalUrl.replace('/api', ''));
});