【问题标题】:frontend+backend: koa-proxy error 404前端+后端:koa-proxy 错误 404
【发布时间】:2017-09-19 14:34:27
【问题描述】:

我有一个 Node 应用程序作为后端,我想将它与 AngularJs 前端连接起来。它们位于同一个 repo 下,位于不同的文件夹中。我的 Node 应用运行良好,我可以使用 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)

我的后端应用没有得到任何响应。我尝试将代理配置上的主机更改为虚拟主机,但出现了另一个错误,确认请求已被代理。

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

【问题讨论】:

    标签: angularjs node.js proxy koa


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-26
      • 2019-02-28
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多