Azure mobile services Azure移动服务:500错误,但它';他真的在工作吗?
我有一个带有自定义API的Azure移动服务。我曾经在iOS上测试过这个API,它似乎工作得很好。我现在正在Android上测试这个API。这就是所讨论的API方法:Azure mobile services Azure移动服务:500错误,但它';他真的在工作吗?,azure-mobile-services,Azure Mobile Services,我有一个带有自定义API的Azure移动服务。我曾经在iOS上测试过这个API,它似乎工作得很好。我现在正在Android上测试这个API。这就是所讨论的API方法: exports.post = function(request, response) { var body = request.body; var email = body.email; var tables = request.service.tables; var users = tables.getT
exports.post = function(request, response) {
var body = request.body;
var email = body.email;
var tables = request.service.tables;
var users = tables.getTable('User');
users.where({ email: email }).read({
success: function (userList) {
if (userList.length === 0) {
response.send(200, { Status: 'Error', Error: 'Email not found.' });
} else {
var user = userList[0];
var providerId = user.ObjectId;
var accounts = tables.getTable('Account');
accounts.where({ User: providerId }).read({
success: function (accountList) {
if (accountList.length === 0) {
response.send(200, { Status: 'Error', Error: 'Internal server error.' });
} else {
var account = accountList[0];
var mssql = request.service.mssql;
var sql = "EXEC [db].[usp_RequestPasswordReset] ?;";
mssql.query(sql, [account.id], {
success: function (results) {
console.log(results);
var codeRow = results[0];
if (codeRow == undefined) {
console.log("codeRow is undefined");
} else {
console.log(codeRow);
}
var code = codeRow.Code;
response.send(200, { Status: 'Success', Message: 'Please check your email for further instructions.', Code: code });
sendEmail(email, user.Name, code);
}
});
}
}
});
}
}
});
};
现在,sendmail
是一个单独的功能,它使用Azure的SendGrid功能发送电子邮件
真正让我困惑的是,所有的代码似乎都工作得很好
- 在我的Android客户端和Azure管理门户上的API日志中都是如此李>
- 我收到的错误消息告诉我,
var code=codeRow.code代码>正在尝试访问“未定义”的“代码”。但它不是未定义的李>
- 回过头来检查我的iOS客户机是否符合此条件会产生相同的结果李>
- 除了返回给用户的消息外,其他一切正常李>
- 需要说明的是,错误代码是500,而不是200,因为我的代码可能会返回一条“内部服务器错误”消息
- 另外,根据控制台日志消息和结果,我非常确定我的
success块正在启动mssql.query
那么,给出了什么呢?mssql.query可以根据存储过程中的内容多次调用回调。您可以在回调之外定义一个变量,例如
var callbackReceived = false;
然后,在回调中,只为实际收到更新记录的调用发送响应:
if (callbackReceived === false && results && results.length > 0) {
callbackReceived = true;
// continue as before
}
另请参见Azure开发人员之一回答的问题:
因此,您提到的问题/答案实际上与我的问题的答案有关,但您给出的答案与我与之交谈的Microsoft技术支持人员的回答无关。尽管SSMS没有显示返回的多个查询集,但在上添加
SET NOCOUNT是我问题的解决方案。我从未听说过mssql.query
多次调用回调,也从未经历过。如果这是真的(我不相信是真的),那就是Azure的一个主要设计缺陷。我同意,这也不是我所期望的mssql.query的工作方式。我最终找到了这个与同一个Azure开发人员的MSDN线程:鉴于我在Microsoft技术支持方面的经验,我不希望他们能够回答这个问题。mssql模块(参考:)是节点应用程序与SQL Server交互的方式-这与Azure无关。使用的正确npm包是