我有一个带有自定义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功能发送电子邮件。
令我感到困惑的是,所有代码似乎都运行正常。
唯一的问题是该调用返回“500:内部服务器错误”错误。
var code = codeRow.Code;
正在尝试访问“未定义”的“代码”。但是不未定义。 mssql.query
成功阻止是根据控制台日志消息和结果触发的。那么,是什么给出了?
答案 0 :(得分:1)
mssql.query可以多次调用您的回调,具体取决于您的存储过程中的内容。您可以在回调之外定义变量,例如
localhost:xxxx/myDB
然后在你的回调中,只发送实际收到更新记录的呼叫的响应:
var callbackReceived = false;
另请参阅Azure开发人员之一回答的问题: Azure mobile service custom API calling SQL SP multiple times