2017-09-19 6 views
0

J'ai une application Node en backend et je veux la connecter avec une interface AngularJs. Ils sont assis sous le même repo, sur des dossiers différents. L'application My Node fonctionne bien, je peux interagir avec elle en utilisant Postman et le navigateur.frontend + backend: erreur koa-proxy 404

Je suis allé avec l'approche proxy, créé une application simple de nœud pour servir le back-end en utilisant koa comme suit:

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); 

})(); 

L'idée est d'avoir toutes les demandes émises contre /media à proxied au back-end. Le code AngularJS ressemble à ceci:

'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(); 
}]); 

Mais quand je charge la page, je reçois un 404 sur la console:

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

Et mon application back-end n'a pas obtenu de réponse. J'ai essayé de changer l'hôte sur la config de proxy à quelque chose de factice et ai obtenu une erreur différente, qui confirme que la demande est envoyée par proxy.

Alors, qu'est-ce qui me manque ici?

Répondre

0

Mon problème était, en effet, un 404. J'ai raté l'ajout d'un enregistreur à ma demande de back-end, donc je ne savais pas qu'il était ce qui obéissait le 404.

Ce fut alors seulement que j'ai remarqué que la requête transmise avait toujours le chemin /api, qui n'était pas servi par le backend. Donc, je devais seulement rediriger tous les appels /api vers les bons et l'issue était allée:

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