Как использовать Axios для редактирования и обновления HTML-страницы? - PullRequest
1 голос
/ 10 июля 2019

Я использую axios и API для получения HTML-кода страницы, редактирую HTML-код и возвращаю его обратно через запрос POST к API. Я успешно извлекаю и редактирую HTML, но не могу понять, как его вернуть / изменить HTML-код веб-страницы.

Я попытался использовать запрос PUT вместо запроса POST, но я получаю ошибку 405, что метод PUT не разрешен для веб-страницы.

axios.get(url, {
  auth: {
    username: USERNAME,
    password: PASSWORD
  },
  headers: {
    'Content-Type': 'application/json'
  }
})
.then( (response) => {
  version = response.data.version.number;
  body = response.data.body.storage.value;

  // takes the body HTML and formats all the links
  newBody = middleware.formatLinks(body);

  data = {
    "type": "page",
    'version': {'number': version + 1},
    'body': {
      'storage': {
        'value': newBody,
        'representation': 'storage'
      }
    }
  }

  // put the body HTML back into the page
  axios.post(url, {
    data: {
      "type": "page",
      'version': {'number': version + 1},
      'body': {
        'storage': {
          'value': newBody,
          'representation': 'storage'
        }
      }
    }
  }, { 
    auth: {
    username: USERNAME,
    password: PASSWORD
    },
    headers: {
      'Content-Type': 'application/json'
    }
  })
  .then( (response) => {
    console.log(response.data);  
  })
  .catch( (error) => {
    console.log(error);
  })
})
.catch( (error) => {
  console.log(error);
})

Я ожидаю, что страница будет обновлена ​​со всеми ссылками, отформатированными мне по вкусу. Однако страница не изменилась. Когда я console.log(response.data) после выполнения запроса post, выводом является строка newBody, когда я ожидаю, что это будет объект JSON

data: {
  'type': 'page',
  'version': {'number': version + 1},
  'body': {
    'storage': {
      'value': newBody,
      'representation': 'storage'
    }
  }
}

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Как упоминалось в моем комментарии в ответе @Aman Raj, у меня есть код, работающий на python, но его перевод на nodejs вызывал у меня проблемы.Поэтому я обошел мою проблему, вызвав мой скрипт на python в nodejs с пакетом python-shell.

let {PythonShell} = require('python-shell');
...
const formatLinks = (id) => {
    let options = {
      mode: 'text',
      pythonOptions: ['-u'], // get print results in real-time
      scriptPath: './python/', // path to my python scripts

      // pass in the page id, username, and password to API request
      args: [id, USERNAME, PASSWORD] 
    };

    PythonShell.run('script.py', options, (err, results) => {
      if (err) throw err;
      // results is an array consisting of messages collected during execution
      console.log('results: %j', results);
    });
}
0 голосов
/ 10 июля 2019

Ваш код выглядит нормально.Может случиться так, что вы обращаетесь к API, который не поддерживает его редактирование.

Протокол передачи данных по протоколу гипертекста (HTTP) 405 Не разрешен Код состояния ответа указывает, что метод запроса известен серверуно не поддерживается целевым ресурсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...