Данные формы с кодом состояния узла js: 307, statusMessage: ‘Временное перенаправление’

#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);
            })
        });
    })
}