Когда я выполняю следующий код из браузера, сервер выдает мне 400 и жалуется, что тело запроса отсутствует. Кто-нибудь знает, как я могу передать простую строку и получить ее в качестве тела запроса?
let content = 'Hello world'
axios.put(url, content).then(response => {
resolve(response.data.content)
}, response => {
this.handleEditError(response)
})
Если я оборачиваю содержимое в [], оно проходит. Но тогда сервер получает его как строку, начинающуюся с [ и заканчивающуюся ]. Что кажется странным.
Повозившись, я обнаружил, что работает следующее
let req = {
url,
method: 'PUT',
data: content
}
axios(req).then(response => {
resolve(response.data.content)
}, response => {
this.handleEditError(response)
})
Но разве первый вариант не должен работать также?
Это работает для меня (код вызывается из node js repl):
const axios = require("axios");
axios
.put(
"http://localhost:4000/api/token",
"mytoken",
{headers: {"Content-Type": "text/plain"}}
)
.then(r => console.log(r.status))
.catch(e => console.log(e));
Журналы: 200
А это мой обработчик запросов (я использую restify):
function handleToken(req, res) {
if(typeof req.body === "string" && req.body.length > 3) {
res.send(200);
} else {
res.send(400);
}
}
Здесь важен заголовок Content-Type.
Пробовали ли вы следующее:
axios.post('/save', { firstName: 'Marlon', lastName: 'Bernardes' })
.then(function(response){
console.log('saved successfully')
});
Ссылка: http://codeheaven.io/how-to-use-axios-as-your-http-client/
axios.put(url,{body},{headers:{}})
.
пример:
const body = {title: "what!"}
const api = {
apikey: "safhjsdflajksdfh",
Authorization: "Basic bwejdkfhasjk"
}
axios.put('https://api.xxx.net/xx', body, {headers: api})