###前提・実現したいこと
AWS Lambdaからaxiosを利用してDELETEリクエストを送信したいと考えています。
###発生している問題・エラーメッセージ
axiosのdeleteメソッドを利用して、deleteリクエストを送信したいのですが、どうしても下記のようにParse Errorが発生してしまいます。
ちなみに送信先のサーバ(https://my-api)はリクエストを正常に受け取れており、処理も正常に完了しています。
{ Error: Parse Error at TLSSocket.socketOnData (_http_client.js:411:20) at emitOne (events.js:96:13) at TLSSocket.emit (events.js:191:7) at readableAddChunk (_stream_readable.js:178:18) at TLSSocket.Readable.push (_stream_readable.js:136:10) at TLSWrap.onread (net.js:561:20) bytesParsed: 470, code: 'HPE_INVALID_CONSTANT', config: { adapter: [Function: httpAdapter], transformRequest: { '0': [Function: transformRequest] }, transformResponse: { '0': [Function: transformResponse] }, timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, validateStatus: [Function: validateStatus], headers: { Accept: 'application/json, text/plain, */*', 'X-Request-Id': 'offline_awsRequestId_354696436885517', 'User-Agent': 'axios/0.16.2' }, method: 'delete', url: 'https://my-api/v1/users/66', data: undefined }, request: Writable { _writableState: WritableState { objectMode: false, highWaterMark: 16384, needDrain: false, ending: false, ended: false, finished: false, decodeStrings: true, defaultEncoding: 'utf8', length: 0, writing: false, corked: 0, sync: true, bufferProcessing: false, onwrite: [Function: bound onwrite], writecb: null, writelen: 0, bufferedRequest: null, lastBufferedRequest: null, pendingcb: 0, prefinished: false, errorEmitted: false, bufferedRequestCount: 0, corkedRequestsFree: [Object] }, writable: true, domain: null, _events: { response: [Function: handleResponse], error: [Function: handleRequestError] }, _eventsCount: 2, _maxListeners: undefined, _redirectCount: 0, _onNativeResponse: [Function], _currentRequest: ClientRequest { domain: null, _events: [Object], _eventsCount: 5, _maxListeners: undefined, output: [], outputEncodings: [], outputCallbacks: [], outputSize: 0, writable: true, _last: true, upgrading: false, chunkedEncoding: false, shouldKeepAlive: false, useChunkedEncodingByDefault: false, sendDate: false, _removedHeader: {}, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, socket: [Object], connection: [Object], _header: 'DELETE /v1/users/66 HTTP/1.1\r\nAccept: application/json, text/plain, */*\r\nX-Request-Id: offline_awsRequestId_354696436885517\r\nUser-Agent: axios/0.16.2\r\nHost: my-api\r\nConnection: close\r\n\r\n', _headers: [Object], _headerNames: [Object], _onPendingData: null, agent: [Object], socketPath: undefined, timeout: undefined, method: 'DELETE', path: '/v1/users/66', _ended: true, res: [Object], aborted: undefined, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, _redirectable: [Circular] }, _currentUrl: 'https://my-api:443/v1/users/66' }, response: undefined }
###該当のソースコード
import axios from "axios"; import {AxiosInstance, AxiosResponse} from "axios"; const sendDeleteRequest = async (url: string, requestConfig: AxiosRequestConfig) => { try { const axiosResponse: AxiosResponse = await axios.delete( url, requestConfig ); return Promise.resolve(axiosResponse); } catch (error) { console.error(error); return Promise.reject(error); } }; const requestConfig = { headers: { "X-Request-Id": "offline_awsRequestId_2446060261876728" } }; // 呼び出しは↓のような形で行っています const axiosResponse: AxiosResponse = await sendDeleteRequest( "https://my-api/v1/users/66", requestConfig );
###試したこと
- 送信しているカスタムHTTPHeader(X-Request-Id)を指定しないで送信(結果は同じでした)
axios.delete
を利用しないでaxios.request
を使用(結果は同じでした)
ちなみにカスタムHeaderを付けなくても以下のHeaderは自動的に作成されてしまいます。
{ Accept: 'application/json, text/plain, */*', 'User-Agent': 'axios/0.16.2' }
https://my-api
は204 を返すのでbodyを返さない実装になっています。
予想ですが、AcceptHeaderが設定されてしまっているので、bodyを変換しようとしてErrorになっているという仮説を立てています。
何とかしてAcceptHeaderを指定しない等のoptionが使えれば良いのですが、良い方法が今のことろ見つかっていません。
###補足情報(言語/FW/ツール等のバージョンなど)
- TypeScript(2.4.1)
- axios(0.16.2)
※このコードはAWS Lambda上で実行されています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/10 01:58