如何使用Angular app.js文件运行NodeJS API?

时间:2016-12-31 09:17:51

标签: javascript angularjs node.js rest mean-stack

我正在按照我在网上找到的一些教程来创建一个使用带有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​​?

3 个答案:

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