# Formdata & Axios 筆記
### 用法
```javascript
const formData = new FormData();
formData.append("file", file);
```
#### fetch API
```javascript
const callAPI = async (data) => {
const result = await fetchURL(`API url`, {
method: "POST",
body: data,
});
return result;
};
```
#### server端
```javascript
import FormData from "form-data";
import axios from "@/utils/axios";
export default defineEventHandler(async (event) => {
try {
const body = await readMultipartFormData(event);
const formData = new FormData();
formData.append(body[0].name, body[0].data);
formData.append(body[1].name, body[1].data, body[1].filename, body[1].type); // file
const headersList = {
...formData.getHeaders(),
};
const bodyContent = formData;
const reqOptions = {
url: `API url`,
method: "POST",
data: bodyContent,
headers: headersList,
};
const response = await axios.request(reqOptions);
return response.data;
} catch (e) {
return { status: e.response.status, message: e.response.data.message };
}
});
```
### Request body larger than maxBodyLength limit
[參考這篇](https://segmentfault.com/a/1190000040050549)
axios 的 request body 有默認的長度上限,所以當使用 formdata
上傳檔案過大時,會發生這個錯誤
#### 解決方法
在 headers 加上這個,將 body 長度設為無限,即可避免這個錯誤。
```javascript
maxBodyLength: Infinity
```
### formdata 無法 getHeaders()
[參考這篇](https://stackoverflow.com/questions/54682225/form-data-axios-unable-to-get-headers-from-formdata-error-getheaders-is-not/54685950#54685950)
在瀏覽器調用會使用 windows 原生的 formdata,會不包含getHeaders()。
#### 解決方法
引用 Node 的 form-data
```javascript
import FormData from "form-data";
```