我有一个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)
我的后端应用程序没有得到任何回复。我尝试将代理配置上的主机更改为虚拟内容并获得了不同的错误,确认请求已被代理。
那么,我在这里错过了什么?
答案 0 :(得分:0)
我的问题确实是404.我错过了在我的后端应用程序中添加一个记录器,因此我不知道它正在产生404。
直到那时我才注意到转发的请求仍然有/api
路径,后端没有提供该路径。所以,我只需要将所有/api
次呼叫重定向到正确的呼叫,问题就消失了:
app.all(/^\/api/, function(req, res) {
res.redirect(req.originalUrl.replace('/api', ''));
});