Как получить правильное сообщение об ошибке, когда хост SFTP недействителен - PullRequest
1 голос
/ 04 апреля 2019

Я написал функцию в Laravel для проверки SFTP-соединения с предоставленными пользователем учетными данными сервера.Эта функция работает нормально и показывает соответствующее сообщение о состоянии соединения.

public function testConnection(Request $request)
{
    $data = $request->all();
    $this->protocol = $data['protocol'];
    $this->host = $data['domain_name'];
    $this->username = $data['username'];
    $this->password = $data['password'];
    $this->port = $data['port'];
    $returnData = $this->checkFtp();
    return response()->json(['status' => true, 'connectionStatus' => $returnData]);
}

public function checkFtp()
{
    // Variable initialization
    $returnData = 'success';

    // SFTP connection test
    if ($this->protocol === 'sftp') {
        $sftp = new SFTP($this->host, $this->port, $this->timeout);
        if ($sftp) {
            if (!$sftp->login($this->username, $this->password)) {
                $returnData = 'Unable to login to the SFTP server';
            }
        } else {
            $returnData = 'Unable to connect to SFTP server';
        }
    }
}

Когда пользователь указывает неверный хост, происходит внутренняя ошибка сервера.Так что я не могу получить сообщение в ответ на показ.

Как получить правильное сообщение об ошибке при возврате этой функции?

Пример (при предоставлении фактических учетных данных)

{  
   "status":true,
   "connectionStatus":"success"
}

Внутренняя ошибка сервера (при указании неверного имени хоста или IP-адреса)

{
"message": "Cannot connect to invalid.host.com:22. Error 113. No route to host",
"exception": "ErrorException",
"file": "/var/www/html/rvhost_admin/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php",
"line": 1139,
"trace": [
    {
        "function": "handleError",
        "class": "Illuminate\\Foundation\\Bootstrap\\HandleExceptions",
        "type": "->"
    },
    {
        "file": "/var/www/html/rvhost_admin/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php",
        "line": 1139,
        "function": "user_error"
    },
    {
        "file": "/var/www/html/rvhost_admin/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php",
        "line": 2158,
        "function": "_connect",
        "class": "phpseclib\\Net\\SSH2",
        "type": "->"
    },

Обновление: Я переписал функцию, добавив try - catch, но все равно получаюта же ошибка ...

// SFTP connection test
    if ($this->protocol === 'sftp') {
        try {
            $sftp = new SFTP($this->host, $this->port, $this->timeout);
            if ($sftp) {
                if (!$sftp->login($this->username, $this->password)) {
                    $returnData = 'Unable to login to the SFTP server';
                }
            } else {
                $returnData = 'Unable to connect to SFTP server';
            }
        } catch(Exception $e) {
            $returnData = $e->getMessage();
        }
    }

1 Ответ

1 голос
/ 05 апреля 2019

Я думаю, вы можете справиться с этим в методе subscribe (), как показано ниже.Внутреннее сообщение об ошибке 500 будет отображаться как «ошибка».просто утешите эту «ошибку» для просмотра сообщения

this.service.functionname(this.form.value).subscribe(data => {
    console.log(data);
}, error => {
    console.log(error);
});
...