【发布时间】:2020-05-04 21:49:14
【问题描述】:
所以我得到了一个 Flutter 应用程序的模板,该应用程序使用 HTTP get 请求从网站检索其所有数据。
我有以下获取餐厅列表的方法:
Future<Stream<Restaurant>> getNearRestaurants(LocationData myLocation, LocationData areaLocation) async {
String _nearParams = '';
String _orderLimitParam = '';
if (myLocation != null && areaLocation != null) {
_orderLimitParam = 'orderBy=area&limit=5';
_nearParams = '&myLon=${myLocation.longitude}&myLat=${myLocation.latitude}&areaLon=${areaLocation.longitude}&areaLat=${areaLocation.latitude}';
}
final String url = '${GlobalConfiguration().getString('api_base_url')}restaurants?$_nearParams&$_orderLimitParam';
final client = new http.Client();
final streamedRest = await client.send(http.Request('get', Uri.parse(url)));
return streamedRest.stream.transform(utf8.decoder).transform(json.decoder).map((data) => Helper.getData(data)).expand((data) => (data as List)).map((data) {
return Restaurant.fromJSON(data);
});
}
但是,当我将模板的 url 变量换成我自己的网站时,应用程序卡住了,streamRest 返回错误 404 页面。
尝试过的解决方案:
- 我用 try/catch 块包围它,它没有给我任何例外。
- 我还安装了邮递员并使用 GET 语句检查了我的网站,以获取我尝试在上面发布的颤振代码中检索的相同餐厅列表,并查看:Postman GET screenshot
- 好像我的网站无法路由到我的 API 文件夹中的特定页面。但都是在 api.php 中定义的。
更新 1:
我的 web.php 看起来像这样https://pastebin.com/QRG300uL。它似乎类似于下面的建议
更新 2:
我运行了 php artisan route::list,它显示所有路由似乎都在那里:
| | POST | api/restaurant_reviews | restaurant_reviews.store | App\Http\Controllers\API\RestaurantReviewAPIController@store | api |
| | GET|HEAD | api/restaurant_reviews | restaurant_reviews.index | App\Http\Controllers\API\RestaurantReviewAPIController@index | api |
| | GET|HEAD | api/restaurant_reviews/create | restaurant_reviews.create | App\Http\Controllers\API\RestaurantReviewAPIController@create | api |
| | DELETE | api/restaurant_reviews/{restaurant_review} | restaurant_reviews.destroy | App\Http\Controllers\API\RestaurantReviewAPIController@destroy | api |
| | GET|HEAD | api/restaurant_reviews/{restaurant_review} | restaurant_reviews.show | App\Http\Controllers\API\RestaurantReviewAPIController@show | api |
| | PUT|PATCH | api/restaurant_reviews/{restaurant_review} | restaurant_reviews.update | App\Http\Controllers\API\RestaurantReviewAPIController@update | api |
| | GET|HEAD | api/restaurant_reviews/{restaurant_review}/edit | restaurant_reviews.edit | App\Http\Controllers\API\RestaurantReviewAPIController@edit | api |
| | GET|HEAD | api/restaurants | restaurants.index | App\Http\Controllers\API\RestaurantAPIController@index | api |
| | POST | api/restaurants | restaurants.store | App\Http\Controllers\API\RestaurantAPIController@store | api |
| | GET|HEAD | api/restaurants/create | restaurants.create | App\Http\Controllers\API\RestaurantAPIController@create | api |
| | GET|HEAD | api/restaurants/{restaurant} | restaurants.show | App\Http\Controllers\API\RestaurantAPIController@show | api |
| | DELETE | api/restaurants/{restaurant} | restaurants.destroy | App\Http\Controllers\API\RestaurantAPIController@destroy | api |
| | PUT|PATCH | api/restaurants/{restaurant} | restaurants.update | App\Http\Controllers\API\RestaurantAPIController@update | api |
| | GET|HEAD | api/restaurants/{restaurant}/edit | restaurants.edit | App\Http\Controllers\API\RestaurantAPIController@edit | api |
| | POST | api/send_reset_link_email | | App\Http\Controllers\API\UserAPIController@sendResetLinkEmail | api |
| | GET|HEAD | api/settings | | App\Http\Controllers\API\UserAPIController@settings | api |
解决方案:
在更改了很多内容后,这对我有用,我将 GET 请求 URL 从“www.domain.com/api/resturants”更改为“www.domain.com/public/api/resturants”
【问题讨论】:
-
你能运行一个 php artisan route:list 并在此处发布输出吗?
-
@FellipeSanches 已发布(更新 2)
-
Laravel 在生产中了吗?没有路线对我有用,这可能是网络服务器的问题,Apache / Ngix 也是...
-
我不知道你有这么多路由,而且 API 似乎已经准备好了。请删除所有路由的链接,暴露在外有安全风险。
-
简而言之,我建议将路线与 POSTMAN 一起使用,然后才去颤振。