我正在按照我在网上找到的一些教程来创建一个使用带有MEAN堆栈的RESTful API的Web应用程序。
我无法同时实现API服务器和Angular路由。我创建了一个server.js
文件来处理到/api/
的路由,例如我有:
...
app.get('/api', function(req, res) {
res.status(200).json({"message": "Welcome to the app"});
});
因此,当API服务器收到请求时,它只会发回一条JSON消息。现在我还有一个带有app.js
文件的公共文件夹,其中包含Angular代码:
var app = angular.module('app', ['ngRoute']);
app.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/index.html',
controller: 'AppController',
resolve: {
message: function(Message) {
return Message.getMessage();
}
}
})
.service("Message", function($http) {
this.getMessage = function() {
return $http.get('/api')
.then(function(response) {
return response;
}, function(response) {
alert("Error retrieving message");
});
}
})
.controller("AppController", function(message, $scope) {
$scope.message = message.data;
});
});
因此,当我从运行node server.js
的命令行启动我的服务器并转到localhost:5000(或任何端口)时,我得到Cannot GET /
我假设这是因为我的server.js
文件中没有路由到'/'
。
如何首先从app.js文件中运行该应用并让它使用API?
答案 0 :(得分:1)
您无法获取/因为尚未安装该应用以在您的服务器上提供服务。为此,您需要创建一个入口点,该入口点将是来自服务器的服务器,而服务器又将处理所有角度路径,视图,控制器等。
在您的server.js文件中,对于与您定义的任何api路由都不匹配的每个请求,您需要将其转发到您的角度应用程序,其中ng-route将加载与您请求的URL对应的视图。 />
安装:
app.get('*', function(request, response){
response.sendfile('/path/to/your/entry.html');
});
现在这个entry.html将包含你的角度应用程序(或你使用的任何前端框架)
答案 1 :(得分:0)
您不需要为index.html文件创建路径,只需将以下行添加到服务器文件中,并将index.html文件放入客户端文件夹。
app.use(express.static(path.join(__dirname, '<client_folder_name>')));
当您启动服务器并打开http://localhost:5000时,index.html文件会自动呈现。
答案 2 :(得分:0)
您可以通过以下4个步骤来完成:
1-创建index.html文件并将apis放在那里:
app.get('/api', function(req, res) {
res.status(200).json({"message": "Welcome to the app"});
});
2-要求在server.js中新创建的index.html文件:
var routes = require('./index');
3-创建服务器并收听端口:
var server = app.listen(5000, function () {
console.log('nodejs server is listening on port 5000!');
});
4-使用server.js中的index.html文件:
app.use('/',routes);