약속 가져오기 본문 읽기
구글 클라우드 스토리지에 업로드하기 위한 다음과 같은 급행 엔드포인트가 있습니다.잘 작동하고 Google api의 응답에 따라 고유한 파일 이름이 제공되므로 앞에 전달할 수 있습니다.
app.post('/upload', (req, res) => {
var form = new formidable.IncomingForm(),
files = [],
fields = [];
form
.on('field', function(field, value) {
fields.push([field, value]);
})
.on('file', function(field, file) {
files.push([field, file]);
})
.on('end', function() {
console.log('-> upload done');
});
form.parse(req, function(err, fields, files){
var filePath = files.file.path;
bucket.upload(filePath, function(err, file, apiResponse){
if (!err){
res.writeHead(200, {'content-type': 'text/plain'});
res.end("Unique File Name:" + file.name);
}else{
res.writeHead(500);
res.end();
}
});
});
return;
});
파일을 전달하는 단축 함수를 호출하여 이 끝점에 도달합니다.
function upload(file) {
var data = new FormData();
data.append('file', file);
return fetch(`upload`,{
method: 'POST',
body: data
});
}
const Client = { upload };
export default Client;
이 함수는 다음과 같이 프론트 엔드에서 호출됩니다.
Client.upload(this.file).then((data) => {
console.log(data);
});
이번 결승전은console.log(data)는 콘솔에 응답을 기록합니다.하지만 제가 쓴 답변은 어디에도 보이지 않습니다 ("Unique File Name:" + file.name)
클라이언트 측의 응답 본문에서 이 정보를 검색하려면 어떻게 해야 합니까?
그dataconsole.log it을 실행하면 다음과 같이 나타납니다.
Postman을 사용하여 엔드포인트에 파일을 게시하면 다음과 같이 응답합니다.
응답 개체를 다루고 있습니다.기본적으로 다음과 같이 응답 스트림을 읽어봐야 합니다.Response.json()아니면Response.text()(또는 다른 방법을 통해) 데이터를 볼 수 있습니다.그렇지 않으면 응답 본문이 항상 잠금으로 읽을 수 있는 스트림으로 나타납니다.예를 들어,
fetch('https://api.ipify.org?format=json')
.then(response=>response.json())
.then(data=>{ console.log(data); })
예상치 못한 결과가 나오면 포스트맨을 사용하여 응답을 검사할 수 있습니다.
게이브 로건이 이 댓글에서 지적한 것처럼 제 코드에 오타가 있었습니다.
좋아요, 좋아요.솔직히 말해서, 나는 당신이 왜 정의를 내리지 않는지 전혀 모르겠어요. 다만 그것이 일종의 철자 오류일 수도 있다는 것 외에는요?
응답 본문 텍스트를 반환하는 프론트 엔드에 대한 업데이트된 코드는 다음과 같습니다.
Client.upload(this.file).then(response => response.text())
.then((body) => {
console.log(body);
});
body는 다음과 같은 문자열입니다.Unique File Name: [FILE-NAME]
다음은 Fetch API에 대한 좋은 설명과 약속 오브젝트인 Cs 트릭에서 얻을 수 있는 응답을 읽는 것입니다. 가져오기를 사용합니다.
비동기/대기를 사용할 수도 있습니다.
json 컨텐츠를 반환할 때:
Client.upload(this.file).then(async r => console.log(await r.json()))
또는 텍스트 형식으로 반환할 수 있습니다.
Client.upload(this.file).then(async r => console.log(await r.text()))
데이터에 대해 "정의되지 않은" 경우 응답을 사용하여 작업을 수행하는 경우 응답을 반환해야 합니다.
저는 이런 일을 하고 있었습니다.
fetch(URL)
.then(response => {
response.text();
console.log(response.statusText);
})
.then(data => console.log(data)); // got "undefined"
응답 개체 반환: 응답 반환.text();
fetch(URL)
.then(response => {
console.log(response.statusText);
return response.text();
})
.then(data => console.log(data)); // got data
저는 몇 분 전부터 이 문제에 직면했습니다.
궁극적인 해결책은 답변을 받은 후 해당 업무를 수행할 수 있는 두 가지 도우미 방법이 있다는 것입니다.
response.json()json 응답일 경우 응답을 json으로 변환합니다.response.text()응답의 원시 텍스트를 가져옵니다(위에서 실패한 경우 사용).
참고: 위의 두 가지 방법을 모두 사용하여 wait()를 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/43903767/read-the-body-of-a-fetch-promise
'programing' 카테고리의 다른 글
| LabVIEW를 MySQL Maria에 연결하려면 어떻게 해야 합니까?DB (0) | 2023.09.06 |
|---|---|
| SQL providerweb.config의 이름 (0) | 2023.09.06 |
| 는 인덱스에서 키 열로 사용할 수 없는 유형입니다. (0) | 2023.09.06 |
| my gitlab-ci에서 주상 mariadb 서비스를 추가하는 방법 (0) | 2023.09.06 |
| Powershell 스크립트를 사용하여 IISRESET을 수행하는 방법 (0) | 2023.09.06 |

