我正在尝试往返于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,我已经访问过then
via $promise
,只是一个想法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句