我来自一个完全没有网络开发的背景,但是看到了mean.js的吸引力,我真的想试一试。
我已经在线跟踪了教程,所以我基本上已经启动,运行和修改了示例应用程序,但现在我正在尝试做一些与教程有关的事情。因此,我对express和angular
有了基本的了解我一直试图将激活器npm包(https://www.npmjs.org/package/activator)集成到应用程序中,虽然我设法适应角位,但我在插入时遇到问题在快速位。这让我有了一个非常根本的疑问,我无法找到的答案。我知道在Mean中,角度代码使用在快递中创建的REST API连接到快速代码。而且我相信使用角度服务。但我不明白怎么做。例如,users模块定义了以下服务:
angular.module('users').factory('Users', ['$resource',
function($resource) {
return $resource('users', {}, {
update: {
method: 'PUT'
}
});
}
]);
angular.module('users').factory('Users', ['$resource',
function($resource) {
return $resource('users', {}, {
update: {
method: 'PUT'
}
});
}
]);
任何人都可以解释一下这是如何运作的吗?
如果我在快递方面有一些代码说:
var sayHello = function(name){
return "Hello"+name;
}
我怎么能通过角度调用它?我知道我们从ngResource模块使用$ resource,但我真的不明白。
非常感谢任何帮助。
答案 0 :(得分:6)
将这些东西连接在一起可能会让人感到困惑。我想要理解的是,当在服务器端使用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 documentation)。我们还有一个controllers
目录,其中包含处理路由逻辑的所有Express控制器。与"用户"保持联系例如,我们定义的路线与我们在Angular代码中定义的/api/users
$resource
路线相匹配:
"use strict";
var controller = require("../controllers/user");
module.exports = function(app) {
app.route("/api/users").get(controller.listUsers);
};
此代码将Express app
作为输入,并将/api/users
的单个路由定义为GET
HTTP请求(请注意调用的.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传递)。
这有意义吗?