我正在制作一个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"我的Slim 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() .'}}';
}
}
?>
如果我使用&#34; testDatabaseItems&#34;在我的服务器上的应用程序中运行,它完全有效,但是当我尝试在我的localhost中使用它时,我收到404错误:
&#34; NetworkError:404 Not Found - http://localhost:8080/api/items&#34;
我知道我收到404错误页面的原因只是地址应该是:
本地主机:8080 / angularjs / API /项
我想要的是,在我的localhost版本中,它使用了良好的路径,但我不需要为我的localhost版本和服务器版本使用不同的代码。
另一件奇怪的事情是,如果我去http://kevdug.webfactional.com/api/items,我会像我期望的那样得到我的json对象,但是在我的localhost中,我需要得到&#34;(我的本地地址)/ api /的index.php /项目&#34 ;.我需要指定&#34; index.php&#34;文件由于某种原因,我不想这样做。
答案 0 :(得分:1)
关于远程服务器和本地服务器配置,只需使用一个简单的布尔值。
// the uri-base is for both remote and local server the same
$uri = 'http://localhost:8080/';
期望远程服务器上的当前文件的uri与本地服务器上的file-uri不同。 例如,在远程服务器上它是/www/site/class.php而在本地服务器上它是c:/php/class.php如果它不起作用,使用另一个特定于PC的指纹,或者只是将文件放在远程服务器上 - 服务器并检查文件是否存在。
示例代码
if(strpos(__FILE__, 'c:/php/') === 0) {
# is local config
$uri .= 'angularjs/api/items';
}
else {
# is remote config
$uri .= 'api/items';
}