我的localhost没有使用正确的路径

时间:2016-01-17 19:41:26

标签: php angularjs api slim

我正在制作一个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;文件由于某种原因,我不想这样做。

1 个答案:

答案 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';
}