#node.js #form-data
#node.js #форма-данные
Вопрос:
Что не так со следующей настройкой?
var form = new FormData();
form.append('something', fs.createReadStream(filePath));
form.append('data', JSON.stringify({
"stuff": "hi"
}));
form.submit({
host: "example.com",
path: `/blah`,
headers: {
"Authorization": `...`
}
}, function (err, res) {
res.resume();
});
Проблема в том, что я вижу:
statusCode:307, statusMessage:'Temporary Redirect'
если я проверю res
Что-то не так с тем, как я отправляю форму?
Что res.resume()
делать?
Я пытался следовать этому: https://www.npmjs.com/package/form-data
Ответ №1:
Возможно, это была очень специфическая проблема для меня, и я, к сожалению, потерял представление о конкретных деталях, которые помогли этой работе. Однако, на благо человечества, вот код, который работает сейчас (я запутал кучу, если вам интересно, почему все так … и т.д.)
async uploadMedia(...) {
const url = `...`;
var form = new FormData();
form.append('x', fs.createReadStream(filePath));
form.append('y', JSON.stringify({
...
}));
let headers = this.#getHeaders();
delete headers['Content-Type'];
return new Promise((resolve, reject) => {
const req = form.submit({
method: 'PUT',
host: process.env.GATEWAY_API_URL,
path: `/api/...`,
protocol: 'https:',
headers: headers
}, function (err, res) {
if (err) {
return reject(new Error(err.message));
}
if (res.statusCode < 200 || res.statusCode > 299) {
return reject(new Error(`HTTP status code ${res.statusCode}`));
}
const body = []
res.on('data', (chunk) => body.push(chunk))
res.on('end', () => {
const resString = Buffer.concat(body).toString();
resolve(resString);
})
});
})
}