У меня есть функция, которая перечисляет базы данных, подключенные к SQL-серверу, путем вызова API.
function dbList(resource, args, scope, server){
// Recieves a list of DBs from the API and adds it to the scope
scope.loadingResponse = true;
resource('http://localhost:1000/apiv1/servers/:server/databases',
{server: server}).get(args).$promise.then(function (result) {
scope.databases = result.databases;
scope.loadingResponse = false;
}, function(error){
console.log(JSON.stringify(error));
errorHandler(scope, error)
})
}
Он вызывается из моего контроллера, как:
dbList($resource, args, $scope, 'SERVER1');
Он проходит все ошибки он сталкивается с моим обработчиком ошибок, который оценивает их:
function errorHandler(scope, error){
// Displays the error message and ends the loading animation
var err_code = error.status;
var err_message = 'Error Code ' + error.status + ': ';
console.log(JSON.stringify(error))
if (err_code == 401){
err_message += 'Unauthorized. Cookie expired or nonexistent.';
}
else if (err_code == 400) {
err_message += 'Missing parameter. Ensure all necessary fields are filled'
}
else if (err_code == 404) {
err_message += 'Resource not found. Ensure that it exists.'
}
else if (err_code == 405) {
err_message += 'Method not allowed. This could be caused by XHR Cross Domain Option requests.'
}
else if (err_code == 409) {
err_message += 'The Resource you wish to use is in use. Ensure that there is no name conflict with an attached database.'
}
scope.loadingResponse = false;
scope.error = err_message;
}
Я делаю вызов к API, не отправляя токен, который я должен проверить, и получаю ошибку 401 в соответствии с консолью Firefox. Это ожидаемое поведение, когда API имеет доступ без токена. Таким образом, я ожидал $ scope.error быть установлен в Error Code 401: Unauthorized. Cookie expired or nonexistent.
Однако то, что я получаю Error Code 404: Resource not found. Ensure that it exists.
Консоль Firefox гласит:
[13:39:20.419] GET http://localhost:1000/apiv1/servers? [HTTP/1.0 401 UNAUTHORIZED 5ms]
[13:39:20.413] "{"data":"","status":404,"config":{"transformRequest":[null],"transformResponse":[null],"method":"GET","url":"http://localhost:1000/apiv1/servers","params":{},"headers":{}}}"
Как и почему angular.js изменила мою 401 в 404, и как я могу получить доступ к правильному коду состояния?
ETA: Проблема оказалась проблемой междоменного запроса, вызванной API-интерфейсом Flask, который я использовал для запуска приложений. См. Мой ответ ниже
angularjs не преобразует 401 в 404. Проверьте ваш запрос с сервера. также проверьте ответ на вкладке сети браузера. – allenhwkim
Оба говорят 401, как и консоль Firefox. –
Что говорят другие браузеры для кода состояния? –