2016-12-31 2 views
0

У меня есть угловое приложение, где я отправляю данные (через json) на свой сервер laravel. Мой сервер находится на ВМ (ubuntu):Отправка данных json серверу Laravel

Здесь я отправлю его на сервер из углового приложения.

this.http.post(this.loginURL, requestBody, options) 

На моем Laravel сервера у меня есть маршрут:

Route::get('patientlogin','[email protected]'); 

и методы контроллера

public function login(Request $request){ 
    // error_reporting(-1); // prints every error, warning, etc 
    error_reporting(0); // no output at all 

    // set content-type of response to json 
    header('Content-Type: application/json'); 

    // import Auth class and custom functions 
    // require_once('custom_functions.php'); 


    $LOGIN_LOG_FILE = "login1.log"; 
    $AUTH_HEADERS_FILE = "auth-headers1.txt"; 


    /* 
     php://input is raw input, regardless of header field "content-type" 
     The PHP superglobal $_POST, only is supposed to wrap data that is either 
     application/x-www-form-urlencoded or multipart/form-data-encoded 
     http://stackoverflow.com/a/8893792 

     When sending only a JSON, $_POST etc will not be populated and php://input has to be used 
     in the php scripts 
     http://stackoverflow.com/questions/1282909/php-post-array-empty-upon-form-submission 
     http://php.net/manual/de/wrappers.php.php 
    */ 



    $content = $request->instance(); 
    $json_raw = $content->json()->all(); 
    $json = json_decode($json_raw, true); 


    /* <-- DEBUGGING START TODO delete */ 
    //read the header, where username and password are supposed to be in 
    $headers = apache_request_headers(); 

    //print the contents of the headers array in a neat structure and log them 
    $headersPrintable = print_r($headers, true); 
    file_put_contents($AUTH_HEADERS_FILE, $headersPrintable, FILE_APPEND); 

    $request = print_r($_REQUEST, true); 
    $post = print_r($_POST, true); 
    file_put_contents("auth-req.txt", $request, FILE_APPEND); 
    file_put_contents("auth-post.txt", $post, FILE_APPEND); 

    file_put_contents("auth-req-json.txt", $json_raw, FILE_APPEND); 
    file_put_contents("auth-req-json_decoded.txt", $json, FILE_APPEND); 
    /* DEBUGGING END --> */ 

    $valid = false; 
    $username = ""; 

    //check if username and passord exist in the json-decoded version of php://input 
    if(array_key_exists("username", $json) && array_key_exists("password", $json)) { 
     $username = $json["username"]; 
     $password = $json["password"]; 
     $valid = Auth::checkCredentials($username, $password); 
    } 

    $response = array(
     "username" => $username, 
     "valid" => $valid 
    ); 

    echo json_encode($response); 

    //exit(); 

} 

Теперь, когда я запускаю приложение, которое я получаю сообщение об ошибке:

POST http://ip/patientlogin 405 (Метод не допускается)

Когда я изменяю получить в моем web.php на сообщение я получаю эту ошибку:

polyfills.js:1 POST http://ip/patientlogin 500 (Internal Server Error) 

и когда я пытаюсь вызвать URL в браузере:

MethodNotAllowedHttpException in RouteCollection.php line 218: 

Кто-то любая идея что может быть ошибкой или что я делаю неправильно?

+0

Это потому, что ваш маршрут является прибудете. 'Route :: get', и вы пытаетесь отправить сообщение. – Erevald

+0

Я думаю, вам нужно проверить свои журналы ошибок или посмотреть результат ответа в инструментах разработчика, чтобы получить дополнительную информацию об ошибке. Если вы вызываете почтовый маршрут в браузере, вы получаете сообщение об ошибке, потому что браузер запрашивает через get .. поэтому сообщение должно быть точным или определить оба. –

+0

изменить this.http.post на this.http.get или что-то, если доступно или изменить тип маршрута вашего сервера, как почтовый маршрутизатор, исключить его из csrf проверить промежуточное ПО –

ответ

1

HTTP GET не может иметь тело (оно может, технически, но оно не должно быть). Поэтому, если вы отправляете тело в запрос, вам следует использовать пост или поставить.

Вы получаете метод не разрешен, так как вы настроили свой маршрут для использования GET not POST.

Изменить

Route::get 

Для

Route::post 

Это должно решить его

+0

Получить запрос не имеет тела? Lol –

+0

Эммм это неправильно, если? Почему LOL? –

+0

GET - это всего лишь глагол http-метода. Каждый метод может иметь тело. –

Смежные вопросы