【发布时间】:2016-01-18 12:59:01
【问题描述】:
我正在使用 Angular(正面)和 Slim(背面)。
当我在本地发出请求时,它工作正常并返回 JSON。
http://localhost/domain/api/jobs
但是当我在我的服务器上发出相同的请求时:
http://xxx.xxx.xxx.xxx/~username/domain/api/jobs
我得到一个 404。经过检查,我看到发送的请求实际上转换为:
http://xxx.xxx.xxx.xxx/~username/~username/domain/api/jobs
我无法提出请求,因为它会自动更改。为什么会这样?
代码如下:
Angular app/service.factory.js
angular
.module('app')
.factory('jobService', jobService);
function jobService($http) {
var baseUrl = 'api/';
return {
getJobs: getJobs,
};
function getJobs() {
return $http.get(baseUrl + 'jobs');
}
};
Angular app/jobs.config.js
angular
.module('app')
.config(config);
function config($routeProvider) {
$routeProvider.when('/', {
templateUrl: 'templates/jobs-view.html',
controller: JobController,
controllerAs: 'jobCtrl'
});
};
function JobController(jobService) {
var that = this;
jobService.getJobs().success(function (data) {
that.jobs = data;
});
};
Slim PHP api/index.php
require 'vendor/autoload.php';
$app = new \Slim\App;
$app->get('/jobs', 'getJobs');
$app->run();
function getJobs() {
$sql = "select * FROM jobs ORDER BY id";
try {
$db = getConnection();
$stmt = $db->query($sql);
$jobs = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
echo json_encode($jobs);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
【问题讨论】:
-
你有类似 $http.get('xxx.xxx.xxx.xxx/~username/domain/api/jobs') 的东西,它被转换为xxx.xxx.xxx.xxx/~username/~username/domain/api/jobs?
-
可以定义一个常量 app.constant('BASE_API_URL', 'xxx.xxx.xxx.xxx/~username/domain/api/') 并将其注入到您进行 api 调用的位置。像 app.service('jobService', function (BASE_API_URL) {});然后,$http.get(BASE_API_URL + 'jobs') 向jobs api发出请求?
-
@Ivan - 你必须在某个地方为你的 $http 请求设置一个基本 URL,对吧?似乎需要查看您的 Slim 路由,它正在解释 'api/jobs' 并将其设置为在您的服务器上与本地时相对于不同的基本 URL。我不知道 Slim,否则我可能有更具体的观点。
-
我想不出转换 URL 的任何原因。如果我能调试应用程序本身就好了。
-
我认为 Prashant 关于注入 URL 的评论是您应该做的。这就是我设置对任何 API 的 Angular 调用的方式……我不使用相对路径。这样做的时候你的假设太多了。