ブラウザから以下のコードを実行すると、サーバーは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/