【问题标题】:Laravel post data through api routes throws 404 not foundLaravel 通过 api 路由发布数据抛出 404 not found
【发布时间】:2017-11-14 16:30:14
【问题描述】:

我正在尝试通过 api 使用 ajax(为此使用 axios)将数据发送到我的控制器。
首先是我的路由文件(/routes/api.php):

Route::post('/booking/request', 'BookingController@sendMail');

我想向这条路线发送数据,所以这是我的要求:

var bookingUrl = baseUrl + 'api/booking/request';

axios.post(bookingUrl, {
    name: "username",
    amount: 2
});

然后,我只想记录这些数据以查看它是否到达我的控制器(app/Http/Controllers/BookingController):

class BookingController extends Controller
{
    public function sendMail(Request $request)
    {
        Log::info('data: ' . $request->name);

    }
}

这根本不起作用。我只是收到一个错误“404 Not Found”。我也用 Postman 尝试过这个请求,但结果相同。由于我无法获得有关究竟是什么不起作用的更多信息,因此我无法修复它。有人可以在这里让我走上正确的道路吗?

编辑:所以实际的问题是baseUrl。后面链接有误,无法使用。

【问题讨论】:

  • bookingUrl 设置为什么?检查php artisan routes:list 以确保它匹配。
  • 抱歉,我刚刚编辑了我的帖子。 bookingUrl 设置为baseUrl + 'api/booking/request'。并且 php artisan routes:list 显示了我的路线 POST | api/booking/request | App\Http\Controllers\BookingController@sendMail | api 的条目
  • 我不确定这是否可行,但请尝试public function sendMail(Request $request) 的定义,并在Log::info($request->name); 内部尝试
  • 我认为您的尝试是该部分的正确方法,但它仍然不起作用。我也认为我什至没有到达控制器。错误一定是在那之前的某个地方。

标签: php laravel laravel-5.5


【解决方案1】:

axios.post 只是一个发布请求,而不是特定于 API 的请求。
把你的路由声明放在 routes/web.php 文件中

//web.php
// now the url for post request will be /booking/request
Route::post('/booking/request', 'BookingController@sendMail');

在js中

//JS
var bookingUrl = baseUrl + 'booking/request';

axios.post(bookingUrl, {
    name: "username",
    amount: 2
});

如果还需要api前缀,在路由声明中添加api

Route::post('/api/booking/request', 'BookingController@sendMail');

// or

Route::group(['prefix'=>'api'], function(){
    Route::post('/booking/request', 'BookingController@sendMail');
});

【讨论】:

  • 同样的结果。我还有一些与 axios.get 配合良好的获取请求。如果它们不是特定于 API 的,它们不应该工作吗?
  • 这仍然不能解决我的问题。我还阅读了 api 文件中的路由,这部分应该是正确的,因为在 RouteServiceProvider.php 中,它会将 api 中间件添加到 api-route 文件中的路由中。
  • 那么你应该在 axios 请求中检查你的 baseurl 变量
  • @kk_:回复:您现在删除的答案是问题代码之外的baseUrl:如果这完全使主要问题无效,您应该删除它或重写它,以便 Abid 的答案可以作为代码审查之类的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2015-01-07
相关资源
最近更新 更多