これらを一緒に接続すると、少し混乱する可能性があります。理解しておくべきことは、サーバー側で Express を使用する場合、ルートを中心に API をモデル化し、渡されるreq
およびオブジェクトとの通信を処理する必要があるということです。res
最初にクライアント側で簡単な例を挙げますが、私は通常、$resource
心配したくない HTTP/ajax の詳細をラップする方法として を使用します。したがって、サービスを次のように記述します。
"use strict";
angular.module("myModule").factory("UserService", ["$resource",
function($resource) {
var resource;
resource = $resource("/api/users", null, {
listUsers: {
method: "GET",
isArray: true
}
});
return resource;
}
]);
(ユーザーの配列が返されることを期待しているため、このリソースにパラメーターを渡していることに注意してisArray
ください。これは、すべての API で常にそうであるとは限りません)。
次に、そのリソースを利用するために、おそらくコントローラーで次のようなコードを作成します。
"use strict";
angular.module("myModule").controller("UserCtrl", ["$scope", "UserService",
function($scope, userService) {
$scope.loadUsers = function() {
userService.listUsers(function(resource, headers) {
// this function is called on success, with the result
// stored within the `resource` variable
// ...
}, function(response) {
// this function is called on error
// ...
});
};
}
]);
サーバー側ですべてがうまくいっていると仮定すると、最初の関数に渡されたユーザーのリストをresource
.
サーバー側では、ユーザーAPIとして機能するユーザーコントローラーを含めるようにルートを構成する必要があります(構成されている場所はどこでも)。したがって、おそらくこのアプリ内には、routes
すべての Express ルートを含むディレクトリがあります (Express ルートの詳細については、app.route のドキュメントを参照してください)。またcontrollers
、ルートのロジックを処理するすべての Express コントローラーを含むディレクトリもあります。「users」の例に沿って、/api/users
$resource
上記の Angular コードで定義したルートと一致するルートを定義します。
"use strict";
var controller = require("../controllers/user");
module.exports = function(app) {
app.route("/api/users").get(controller.listUsers);
};
このコードは Expressapp
を入力として受け取り、単一のルートをHTTP リクエストとして定義します (呼び出される関数に注目して/api/users
ください)。このルートのロジックは、ユーザー コントローラーで次のように定義されます。GET
.get
"use strict";
exports.listUsers = function(req, res) {
var users;
// ...somehow populate the users to return...
res.send(users);
};
ユーザーの配列にデータを入力する方法の詳細は残しましたが、これでアイデアが得られることを願っています。このコントローラーには、req
(要求) およびres
(応答) HTTP オブジェクトが入力として渡されるため、ユーザーが渡した内容の詳細について要求オブジェクトを照会し、要求/応答ループを完了するために何らかの応答をユーザーに送り返す必要があります。この例では、res.send
関数を使用して JavaScript 配列 (JSON として渡されます) を単純に送り返しています。
それは理にかなっていますか?