2016-12-31 4 views
0

私はMEANスタックでRESTful APIを使用するWebアプリケーションを作成するためにオンラインで見つけたチュートリアルをいくつか続けています。Angular app.jsファイルでNodeJS APIを実行するにはどうすればよいですか?

APIサーバーとAngularルートの両方を実装するのに問題があります。私は/api/へのルートを扱うserver.jsファイルを作成したので、例えば私が持っている:APIサーバーが要求を取得するとき

... 
app.get('/api', function(req, res) { 
    res.status(200).json({"message": "Welcome to the app"}); 
}); 

だからそれだけでJSONメッセージを送り返します。だから、

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を実行しているコマンドラインから自分のサーバーを起動して、ローカルホストにアクセスしてください:(またはそれが何であれ、ポート5000今、私もそれで角度コードを持っているapp.jsファイルを使用して、パブリックフォルダを持っています)、私は私が'/'に私のserver.jsファイル内のルートを持っていないためであると仮定していCannot GET /

を取得します。

最初にapp.jsファイルからアプリを実行し、APIを使用するにはどうすればよいですか?

+0

あなたはアプリを実行し、あなたのserver.jsのエントリ・ポイントを必要としています。あなたは急行を使用していますか? – Zeokav

+0

はい私はエクスプレスを使用しています。私はserver.jsファイル内のすべてのAPIルートを定義しました。私はそれを角の側にどのように接続するのか分かりません –

答えて

1

あなたのサーバーにサービスが提供されるようにアプリケーションがマウントされていないため、GET /できません。これを行うには、サーバーからのサーバーとなるエントリポイントを作成し、角度ルート、ビュー、コントローラーなどをすべて処理します。
server.jsファイルでは、あなたが定義したそれらのapiルートのいずれかにマッチするなら、ng-routeがあなたが要求したURLに対応するビューをロードする角度アプリにそれを転送する必要があります。マウントする

app.get('*', function(request, response){ 
    response.sendfile('/path/to/your/entry.html'); 
}); 

を今、このentry.htmlがあなたの角度アプリ(またはあなたがそのことについては使用しているすべてのフロントエンドフレームワーク)を含んでいます

0

あなたはindex.htmlをのためのルートを作成する必要はありません。ファイルを次の行をサーバファイルに追加し、index.htmlファイルをクライアントフォルダに配置します。

app.use(express.static(path.join(__dirname, '<client_folder_name>'))); 

あなたのサーバーとオープンhttp://localhost:5000を起動すると、その後のindex.htmlファイルは自動的にレンダリングします。あなたは、次の4つのステップでそれを行うことができます

0

1-あなたのindex.htmlファイルを作成し、そこにAPIを置く:

app.get('/api', function(req, res) { 
    res.status(200).json({"message": "Welcome to the app"}); 
}); 

2-がサーバーで新しく作成されたindex.htmlファイルが必要です.js:

var routes = require('./index'); 

3-サーバーを作成し、ポートに耳を傾ける:

var server = app.listen(5000, function() { 
    console.log('nodejs server is listening on port 5000!'); 
}); 
server.jsで

、4-使用index.htmlファイル:

app.use('/',routes); 
関連する問題