Node.js和快速路由,如何处理客户端承诺

阿米尔·拉维(Amir Lavi)

我正在尝试往返于mongodb的单个路由,但似乎在客户端,我无法从$ resource收到的承诺中检索数据。在HTML页面上,有一个按钮,可以单击ng并单击以下功能:

$scope.getToken = function() {
    console.log('$scope.getToken()');
    authenticationService.getToken($scope.data.email).then(function(result) {
        $scope.data.token = result;
    });
}

收到的结果是:

对象“ m”,其字段为-0:“ j”,1:“ 6”,2:“ o”,3:“ p”,4:“ E”,5:“ 7”,6:“ X”, 7:“ t”,$ promise:d,$ resolved:true,proto:对象

如您所见,我收到生成的令牌,数据库似乎可以正常工作,并且函数也可以调用。

客户端上收到答案的服务具有以下功能:

    function getToken(userEmail) {
    var deferred = $q.defer();
    $resource(baseUrl + '/getToken').save({
        email : userEmail
    }, function(result, error) {
        if(result) {
            deferred.resolve(result);
        }
        else {
            deferred.reject(error);
        }
    });
    return deferred.promise;
}

发送此消息的服务器端函数:

var router = require('express').Router();
var authenticator = require('../utils/authUtils');
router.post('/getToken', function(request, response) {
authenticator.getToken(
    function(error, result) {
        if(error) {
            //handle error
        }
        else if(result) {
            response.json(result);
        }
    }
);

在authUtils.js中:

var mongoUtils = require('./mongoUtils');
getToken : function(callback) {
    var genToken = randToken.generate(8);
    mongoUtils.query(COLLECTIONS.TOKENS, {'token': { $eq: genToken } },
        function(error, result) {
            if((result && result.length) || error) {
                //handle error or duplicates
            }
            else if(result) {
                callback(null, genToken);
            }
        }
    );
}

在mongoUtils中:

query : function(collectionName, query, callback) {
    _db.collection(collectionName).find(query).toArray(function (error, result) {
        console.log('Utils.query');
        if(error) {
            //handle error
        }
        else {
            callback(error, result);
        }
    });
}

为什么服务器端将答案与承诺一起发送到对象内部,我应如何处理?

蒙施

将其作为索引对象返回的原因是toArray

 _db.collection(collectionName).find(query).toArray(function... 

一种可能的解决方案是不要toArray在字符串上使用或slice在发送回结果之前进行调用

response.status(200).json({token: Array.prototype.slice.call(result)})

我可能无法完全理解您的问题的另一种可能性是尝试:

authenticationService.getToken($scope.data.email).$promise.then(...)

如果它是ngResource,我已经访问过thenvia $promise,只是一个想法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 node.js 处理客户端路由?

Node.js WebSockets客户端待定承诺

如何使用jquery ajax和node js在快速框架中将数据从客户端传递到服务器?

Elastic Search Node.js客户端-路由错误

Node.js:在客户端处理JSON对象

Node.js多客户端处理

在Node.js中,如何从处理程序/回调方法向客户端发送消息

如何在Node.js应用程序的客户端站点上处理JWT令牌?

如何使用Pusher将用户的存款和取款详细信息从客户端发送到Node.js(快速)服务器?

如何使用AWS Lambda Node.js服务器实施Braintree并生成带有承诺的客户端令牌?

如何在Node.js和Jade中使用客户端Jquery?

如何在 Node.js 和 React 中分离客户端、API、管理员?

如何在Node.js的客户端设置令牌?

如何在Node JS中配置Redis客户端

正确处理Node.js TLS服务器和C TLS客户端(openSSL)连接的方法

node.js中客户端会话与快速会话之间的区别

Node.js通过快速渲染将参数传递给客户端

如何正确处理 Node.js gRPC 客户端和服务器之间的回调

如何处理前端Apollo客户端上来自Node / Koa的后端错误

如何在没有 node.js 的情况下在 js 中建立客户端 - 客户端连接?

如何在Node-Opcua服务器中获得已连接的客户端和客户端证书

如何使用Node.js和NPM创建Web客户端应用程序(如angularjs教程)

node.js / mongoDB-如何在客户端和Web服务器之间管理ObjectID

Node.js是否可以一一处理客户端请求?

Node.js Socket.IO客户端``未处理的socket.io URL''

在Node / Express中同时处理客户端请求

Socket.io Node Js服务器和React js客户端未连接

Node.js 和 Mustache.js:如何将服务器端渲染与客户端 Mustache 模板分开?

Express.js与Node.js,多个客户端