【问题标题】:How to fix 500 (Internal Server Error) Vue js - Laravel (Edited)如何修复 500(内部服务器错误)Vue js - Laravel(已编辑)
【发布时间】:2020-01-09 17:45:30
【问题描述】:

我正在为大学使用 Vuejs 和 laravel 做一个项目,当我将信息发送到 api 时我需要支持

我正在使用 axios 发布帖子,但他们给了我一个错误:500(内部服务器错误)。但我看不到错误,我想我的代码都很好。

这是我的提交方法

submitFiles() {
      for (let i = 0; i < this.files.length; i++) {
        if (this.files[i].id) {
          continue;
        }
        let formData = new FormData();
        formData.append("file", this.files[i]);

        axios
          .post("/files/upload-file", formData, {
            headers: {
              "Content-Type": "multipart/form-data"
            }
          })
          .then(
            function(data) {
              this.files[i].id = data["data"]["id"];
              this.files.splice(i, 1, this.files[i]);
              console.log("success");
            }.bind(this)
          )
          .catch(function(data) {
            console.log("error");
          });
      }
    }
  }

这是我的路线帖子(已编辑)


Route::get('/', function () {
    return view('welcome');
});



Auth::routes();

Route::group(['middleware' => 'auth'], function () {
    Route::get('files', 'FileEntriesController@index');
});

Route::get('files/create', 'FileEntriesController@create');
Route::post('files/upload-file', 'FileEntriesController@uploadFile');

Route::get('/home', 'HomeController@index')->name('home');

Route::get('{path}','HomeController@index')->where('path', '([A-z\d-\/_.]+)?');

这是我的控制器

public function uploadFile(Request $request) {
        $file = Input::file('file');
        $filename = $file->getClientOriginalName();

        $path = hash( 'sha256', time());

        if(Storage::disk('uploads')->put($path.'/'.$filename,  File::get($file))) {
            // $input['user_id'] = $user_id;
            $input['filename'] = $filename;
            $input['mime'] = $file->getClientMimeType();
            $input['path'] = $path;
            $input['size'] = $file->getClientSize();
            $file = FileEntry::create($input);

            return response()->json([
                'success' => true,
                'id' => $file->id
            ], 200);
        }
        return response()->json([
            'success' => false
        ], 500);
    }

我希望将信息传递到数据库,但它显示错误 405(不允许方法)

已编辑

在部分网络的 isspect 选项中,我可以找到这个:

{消息:“找不到类 'App\Http\Controllers\Input'”,...} 异常:“Symfony\Component\Debug\Exception\FatalThrowableError” 文件:“C:\laragon\www\vue-laravel-app\app\Http\Controllers\FileEntriesController.php” 线路:11 消息:“找不到类 'App\Http\Controllers\Input'”

【问题讨论】:

  • 路由文件的其余部分是什么样的。上传路线上方有Route::get('files/{file}', 'FileEntriesController@show'); 之类的东西吗?您发布的所有内容看起来都是正确的。
  • 我编辑了我的帖子,你可以看到我所有的路线,这些路线在 web.php 文件中
  • this.post_url 的值是多少,您可以将 axios 中的 url 设置为 '/files/upload-file' 看看是否有效。
  • 确保您使用 Route::post() 为您发送的post_url创建了一个路由条目
  • /files/upload-file/ 我试试这个,但没用

标签: javascript php laravel vue.js


【解决方案1】:

web.php 中的所有 POST/PUT/PATCH 请求均受 CSRF-protection 保护。

您似乎没有通过请求标头传递任何令牌,或者它可能在正文中?否则会导致Method Not Allowed 错误。

最好使用 API 路由,因为 csrf-protection 在它们上被禁用。

【讨论】:

  • 默认的 Laravel 设置将 axios 配置为从默认布局的元标记中获取 csrf 令牌。如果这与 CSRF 令牌不匹配有关,我希望无论如何都会看到 HTTP 419 响应(由于 TokenMismatchException)。
猜你喜欢
  • 2020-05-09
  • 1970-01-01
  • 2019-04-13
  • 2019-01-24
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
相关资源
最近更新 更多