【发布时间】:2016-03-09 21:21:32
【问题描述】:
我有一个带有自定义 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.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);
}
});
}
}
});
}
}
});
};
现在,sendEmail 是一个单独的函数,它使用 Azure 的 SendGrid 功能发送电子邮件。
真正让我感到困惑的是,所有代码似乎都运行良好。
- 存储过程执行得很好。
- 数据库的更新完全符合我的预期。
- 电子邮件完全按照预期通过 SendGrid 服务。
- 我在代码中的 console.log 消息显示了预期值。
唯一奇怪的是调用返回“500:内部服务器错误”错误。
- 在我的 Android 客户端和 Azure 管理门户上的 API 日志中都是如此。
- 我收到的错误消息告诉我
var code = codeRow.Code;正在尝试访问“未定义”的“代码”。但它不是未定义。 - 返回并检查我的 iOS 客户端会产生相同的结果。
- 除了返回给用户的消息外,一切正常。
- 需要明确的是,错误代码是 500,而不是 200,因为我的代码可能会返回“内部服务器错误”消息。
- 另外,根据控制台日志消息和结果,我非常确定我的
mssql.query成功块正在触发。
那么,什么给了?
【问题讨论】: