我在VisualStudio JS-Apache Cordova项目中使用Azure移动服务(AzMS),我调用AzMS的自定义API将用户数据插入存储中。我之前在VS网络应用程序javascript中使用的这个代码非常相同,并且它工作正常。 然而,在cordova项目中,我得到了一个意外的连接失败"调用invokeApi时出错。当我从VS网络应用程序尝试时,它工作正常,这意味着自定义API服务代码是好的。
这是我的js客户端代码:
azmsClient.login(oAuthProvider).done(function (results) {
console.log("You are now logged in as: " + results.userId);
var theUserAuthId = results.userId;
azmsClient.invokeApi('Users/insert', {
method: 'POST',
body: { userAuthId: theUserAuthId }
}).done(function (response) {
//.... success code
},
function (error) {
console.log("Error: " + err.request.responseText);
//.... error handling
});
},
function (err) {
console.log("Error: " + err.request.responseText);
//.... error handling
});
在控制台日志中,第一个日志("您现在登录为:" ..)被记录,之后出现错误 - 意外连接失败。
我的天蓝色定制Api代码 -
var logger = require('../api/logUtils.js').logger;
exports.register = function(api){
api.post('insert', insertUser);
};
/******************************************************************
* @param request
* @param response
*******************************************************************/
function insertUser(request, response){
var user = request.user;
var iM = "api.User.insertUser-";
logger.info( iM + ' called: - ' , request, response, user);
// Data validation
if ( user.level === 'anonymous' ) {
logger.error( iM + 'Anonymous User' );
response.send(500, { error: "Anonymous user." });
}
user.getIdentities({
success: function (identities) {
var req = require('request');
var userId = user.userId.split(':')[1];
var theProvdr = user.userId.split(':')[0];
var reqParams;
logger.info(iM + ': calling getOAuthUserDetails for Identities: - ' , identities);
try {
reqParams = getOAuthUserDetails(userId, identities);
}
catch(err){
logger.error(iM + ': getOAuthUserDetails - ' , err);
response.send(500, { error: err.message });
return;
}
req.get(reqParams, function (err, resp, body) {
if (err) {
logger.error(iM + ': Error calling provider: ', err);
response.send(500, { error: 'Error calling Authentication provider' });
return;
}
if (resp.statusCode !== 200) {
logger.error(iM + ': Provider call did not return success: ', resp.statusCode);
response.send(500, { error: 'Provider call did not return success: ' + resp.statusCode });
return;
}
try {
logger.info(iM + ': success: got User Details body ', body);
var theAppUser = oAuthUser_To_appUser(theProvdr, JSON.parse(body));
addUser(theAppUser, user, {
success: function(userAlreadyExist, userEnt){
logger.info( iM + ': addUser: success', userEnt);
response.send(200, getAppUserEnt(userEnt));
},
error: function(err){
logger.error( iM + ': Error in addUser: ', err);
response.send(500, { error: err.message });
}
});
} catch (err) {
logger.info(iM + ': Error parsing response: ', err);
response.send(500, { error: err.message });
}
});
},
error: function(err){
logger.info(iM + ': error on calling getIdentities: - ' , err);
response.send(500, { error: err.message });
}
});
在azure服务日志中,当从cordova项目运行时,我看不到自定义api的user.insert函数记录的条目,这意味着api被调用。如前所述,从VS web项目调用时,日志记录看起来都很好。
(这有点类似于here提出的问题,但不完全相同。)
我无法弄清楚为什么会发生这种情况;任何想法?
答案 0 :(得分:0)
您是在设备,模拟器还是Ripple上运行?如果是Ripple,则必须将Cross Domain Proxy更改为“disabled”。我有类似的问题,这似乎有所帮助。