如何从api res.send中检索数据?

时间:2016-02-18 00:30:55

标签: javascript angularjs mean-stack

我正在为我的单页应用程序使用javascript MEAN堆栈。

我有一个Angular工厂打电话给我的Api。

app.factory('authorizing', function($resource){
    return $resource(
        '/api/authorizing/:username',
        {'username':'@username'},           
    // retreiving only one user and all their roles
        {'singleUser' : {
            method:'GET'
            ,isArray: false
            }}
    );
});

我像这样在我的控制器中调用工厂。我的目标是根据从Api返回的响应更新网页数据。我希望返回一个真值或假值。我尝试了其他的东西,但我想在服务器端保留我的授权。

app.controller('usrPageController', function ($scope, usrServiceById, $route, authorizing, $rootScope) {

    $scope.updateUser = function (data,field){

        var vCheckUserRoles;
        vCheckUserRoles = authorizing.singleUser({'username': $rootScope.current_user});

        if (vCheckUserRoles == true){
            usrServiceById.update({'username':username},{field:data, 'fieldName':field});
        };
    };
    });

数据库使用res.send返回结果数据。

.get(function (req, res) {
        RoleUser.find({ 'aclUserName': req.params.username }, function (err, aclUser) {
            if (err) { return res.sendStatus(500) };

            // return an error if no user is found
            if (aclUser == null) { return res.sendStatus(401) };

            //check for proper role in list of users
            for (var i = 0; i < aclUser.length; i++) {
                if (aclUser[i].aclUserResource == req.params.username + '_PROFILE') {

                    //return a successful status
                    return res.send('true');

                };
            };

            //return a failed status
            return res.send('false');
        });
    });

我没有从代码中获得任何错误,但返回对象在res.send之后命中控制器时为空。我尝试过不同类型的数据,但似乎没有什么对我有用。任何帮助表示赞赏。我在我的Api中有另外的电话。它们工作但我直接从我的数据库获取数据与回调并将其提供给res.send。这是我的代码中唯一一次尝试返回除成功回调变量之外的东西。

更新代码:

我删除了var vCheckUserRoles。现在,该值将传递给成功回调

app.controller('usrPageController', function ($scope, usrServiceById, $route, authorizing, $rootScope) {

        authorizing.singleUser({'username': $rootScope.current_user},function(response){
            console.log('response = ' + response.data)
                if (response.data == 'true'){
            usrServiceById.update({'username':usrSingle.username},{field:data, 'fieldName':field});
        };
        });
    });

2 个答案:

答案 0 :(得分:1)

您可以使用res.json而不是res.send来发送查询的状态。

示例////    res.json({状态:真})

在客户端,您可以在data.status字段中访问该状态值。

答案 1 :(得分:0)

在服务器上,您发送数据的方式如下:

res.status(200).send({message: "Hello!"});

在前端您会收到数据,然后按以下步骤解析它以获取数据:

fetch(url)
.then(response => {
    if(response.ok) {
        return response.json();
    }
}).then(data => {
    if(data) {
        console.log(data);
    }
}).catch(err => console.error(err));
相关问题