我的本地主机没有使用正确的路径
My localhost doesn't use the right path
我正在制作一个 AngularJS 应用程序并且我正在使用一个 Slim API。我使用 API 从我的数据库中获取数据。
我在测试我的应用程序时发现了一些东西。我的应用程序在本地主机中,但在服务器中,它们使用完全相同的代码。我使用此代码调用我的 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);
});
};
}
]);
这是我在 Slim "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
我想要的是在我的本地主机版本中,它使用正确的路径,但我不需要为我的本地主机版本和服务器版本设置不同的代码。
另一件奇怪的事情是,如果我去 http://kevdug.webfactional.com/api/items,我会像我期望的那样得到我的 json 对象,但是在我的本地主机中,我需要去“(我的本地主机地址) /api/index.php/items”。出于某种原因,我需要指定 "index.php" 文件,但我不想这样做。
关于远程服务器和本地服务器配置,使用简单的布尔值即可。
// 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-specific 指纹,或者只是将文件放在 remote-server 上并检查文件是否存在。
示例代码
if(strpos(__FILE__, 'c:/php/') === 0) {
# is local config
$uri .= 'angularjs/api/items';
}
else {
# is remote config
$uri .= 'api/items';
}
我正在制作一个 AngularJS 应用程序并且我正在使用一个 Slim API。我使用 API 从我的数据库中获取数据。
我在测试我的应用程序时发现了一些东西。我的应用程序在本地主机中,但在服务器中,它们使用完全相同的代码。我使用此代码调用我的 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);
});
};
}
]);
这是我在 Slim "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
我想要的是在我的本地主机版本中,它使用正确的路径,但我不需要为我的本地主机版本和服务器版本设置不同的代码。
另一件奇怪的事情是,如果我去 http://kevdug.webfactional.com/api/items,我会像我期望的那样得到我的 json 对象,但是在我的本地主机中,我需要去“(我的本地主机地址) /api/index.php/items”。出于某种原因,我需要指定 "index.php" 文件,但我不想这样做。
关于远程服务器和本地服务器配置,使用简单的布尔值即可。
// 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-specific 指纹,或者只是将文件放在 remote-server 上并检查文件是否存在。
示例代码
if(strpos(__FILE__, 'c:/php/') === 0) {
# is local config
$uri .= 'angularjs/api/items';
}
else {
# is remote config
$uri .= 'api/items';
}