mean.js $资源调用快速服务器RESTful API

Kar*_*oor 3 rest node.js express angularjs-service meanjs

我来自一个完全没有网络开发的背景,但是看到了mean.js正在崛起的牵引力,我真的很想试一试.

我已经在线学习了教程,所以我基本上已经开始,运行和修改了示例应用程序,但我现在正在尝试做一些与教程有关的事情.因此,我对快速和棱角有了基本的了解

我一直在尝试将激活器npm包(https://www.npmjs.org/package/activator)集成到应用程序中,虽然我已经设法适应角位,但我无法插入表达位.这让我产生了一个非常根本的疑问,我无法找到答案.我知道在Mean中,角度代码使用在express中创建的REST API连接到express代码.而且我相信使用角度服务.但我不明白怎么做.例如,users模块定义了以下服务:

angular.module('users').factory('Users', ['$resource',
    function($resource) {
        return $resource('users', {}, {
            update: {
                method: 'PUT'
            }
        });
    }
]);
Run Code Online (Sandbox Code Playgroud)

var sayHello = function(name){
 return "Hello"+name;
}
Run Code Online (Sandbox Code Playgroud)

angular.module('users').factory('Users', ['$resource',
    function($resource) {
        return $resource('users', {}, {
            update: {
                method: 'PUT'
            }
        });
    }
]);
Run Code Online (Sandbox Code Playgroud)

var sayHello = function(name){
 return "Hello"+name;
}
Run Code Online (Sandbox Code Playgroud)

我怎么能通过角度调用它?我知道我们从ngResource模块使用$ resource,但我真的不明白.

任何帮助将非常感激.

dyl*_*nts 6

将这些东西连接在一起可能会有点混乱.我想了解的是,在服务器端使用快递的时候,你需要你的API模型的路线周围,以及处理与通信reqres你会被移交的对象.

所以首先在客户端,举一个简单的例子,我通常使用它$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;
    }
]);
Run Code Online (Sandbox Code Playgroud)

(请注意,我将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

                // ...

            });
        };
    }
]);
Run Code Online (Sandbox Code Playgroud)

现在假设一切都在服务器端正确,我们将收到我们要播放的用户列表,并传入第一个函数作为resource.

在服务器端,我们需要配置我们的路由(无论在哪里配置)以包含我们的用户控制器,它将作为我们的用户API.所以也许在这个应用程序中我们有一个routes包含所有Express路由的目录(有关Express路由的更多信息,请参阅app.route文档).我们还有一个controllers目录,其中包含处理路由逻辑的所有Express控制器.保持"用户"示例,我们将定义一条路线,该/api/users $resource路线与我们在Angular代码中定义的路线相匹配:

"use strict";

var controller = require("../controllers/user");

module.exports = function(app) {
    app.route("/api/users").get(controller.listUsers);
};
Run Code Online (Sandbox Code Playgroud)

此代码将Express app作为输入,并/api/usersGETHTTP请求定义单个路由(请注意.get调用的函数).此路由的逻辑在用户控制器中定义,如下所示:

"use strict";

exports.listUsers = function(req, res) {
    var users;

    // ...somehow populate the users to return...

    res.send(users);
};
Run Code Online (Sandbox Code Playgroud)

我们已经留下了如何填充该用户数组的详细信息,但希望这能为您提供这个想法.该控制器作为输入传递req(请求)和res(响应)HTTP对象,因此它可以查询请求对象以获取用户传入的详细信息,并且必须向用户发送一些响应以完成请求/响应循环.在这个例子中,我使用该res.send函数简单地发送回我们的JavaScript数组(将作为JSON传递).

那有意义吗?