Я создаю приложение AngularJS, и я использую Slim API. Я использую свой API для получения данных из моей БД.Мой localhost не использует правильный путь
Я тестировал свое приложение, и я заметил что-то. У меня есть приложение в моем локальном хосте, но на сервере, и они используют тот же самый код. Я использую этот код для вызова API мой:
angular.module('appDatabaseCtrl', [])
.controller('databaseCtrl', ['$scope','$routeParams', '$http', '$log',
function($scope, $routeParams, $http, $log){
$scope.testDatabaseItems = function(){
$http.get('/api/items').success(function(data) {
$log.info("succes!");
$log.log(data);
})
.error(function (data, status){
$log.error("error!");
$log.log(data);
});
};
$scope.testDatabaseItemById = function(){
$http.get('/api/items/' + $scope.id).success(function(data) {
$log.info("succes!");
$log.log(data);
})
.error(function (data, status){
$log.error("error!");
$log.log(data);
});
};
}
]);
Вот мой файл «index.php» в моем Слим API:
<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
//nécessite Slim
require 'vendor/autoload.php';
//Instancie une app de Slim
$app = new \Slim\App;
//Associe type de requête avec fonction et paramêtres
$app->get('/items', 'getItems');
$app->get('/items/{id:\d+}', 'getItemById');
//Démarre l'application
$app->run();
// Accès à la base de données
function DB_Connection() {
$dbhost = "localhost";
$dbuser = "kevdug_angularjs";
$dbpass = "*****************";
$dbname = "angularjs";
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbh;
}
function getItems() {
$sql = "select * FROM aj_items";
try {
$db = DB_Connection();
$stmt = $db->query($sql);
$list = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($list);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
function getItemById(Request $request, Response $response, $args) {
$id = $args["id"];
$sql = "select * FROM aj_items WHERE id=".$id;
try {
$db = DB_Connection();
$stmt = $db->query($sql);
$list = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($list);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
?>
Если я использую функцию «testDatabaseItems» в мое приложение на мой сервер, он отлично работает, но когда я пытаюсь использовать его в моем локальном хосте, я получаю сообщение об ошибке 404:
"NetworkError: 404 Not Found - http://localhost:8080/api/items "
Я знаю, что причина, почему я получаю страницу 404 ошибки просто, что адрес должен быть:
localhost:8080/angularjs/api/items
Что я хочу, так это то, что в моей версии localhost он использует хороший путь, но мне не нужно иметь другой код для моей версии localhost и моей версии сервера.
Другая странная вещь: если я перейду к http://kevdug.webfactional.com/api/items, я получу свой объект json, как я ожидаю, но в моем локальном хосте мне нужно добраться до "(моего локального адреса) /api/index.php/items" , По какой-то причине мне нужно указать файл index.php, и я бы не хотел этого делать.
Дело в том, что мне нужно сделать это в моем файла JavaScript, а не в файле PHP. Кроме того, вы отвечаете немного технически для меня, не могли бы вы сделать его более понятным? –
hi Kévin, в вашем javascript-файле это должно быть довольно легко достичь. Здесь вы можете просто прочитать доменное имя с помощью window.location или что-то, чтобы проверить, является ли местоположение localhost (локальным, выбирает локальный url) или не localhost (удаленный, выберите удаленный url). – PeterH
Спасибо, ваша идея настолько проста, но при этом идеальна для моей ситуации, не могу поверить, что я об этом не думал. Я использовал оператор if, чтобы поместить путь к API в var, который я всегда использую каждый раз, когда мне нужно вызывать свой API. Я просто добавляю файл index.php в путь, так как заметил, что если я использую «api/...» insted из «/ api/...», он находит папку api apreat ... Почему это так? –