Как отправить POST-запрос на мой сервер NodeJS с объектом, использующим AXIOS?

#javascript #node.js #post #axios #postman

#javascript #node.js #Публикация #axios #почтальон

Вопрос:

Все работает по назначению с использованием POSTMAN. но из моего приложения я не получаю тех же результатов, или, если быть точным, никаких результатов.

Вот мой код реакции:

 const jsonObj = JSON.stringify({ email, subject, body })

const config = {
    headers: {
        'Content-Type': 'application/JSON',                
    }
}

try {            
    const response = await axios.post('http://localhost:5000', jsonObj, config); 
                    
    console.log(response);
} catch (e) {            
    console.log(e);
}
 

И это мой код NodeJS:

 import http from 'http';

function response(res, statusCode, contentType, message) {  
    res.writeHead(statusCode, { "Content-Type": contentType, "Access-Control-Allow-Origin": "http://<SERVER_NAME>:<PORT>" });
    res.end(JSON.stringify({ message }));
}

const server = http.createServer((req, res) => {
    if (req.url === '/' amp;amp; req.method === 'POST') {
        try {
            let body = '';

            req.on('data', (chunk) => {
                body  = chunk.toString();

            });

            req.on('end', () => console.log(JSON.parse(body)));
            response(res, 201, 'application/json', 'Email was successfully sent...');
        } catch(e) {
            response(res, 500, 'application/json', e);
        }
    }
})

server.listen(<PORT>, () => console.log('Server listening...'));
 

Я пробовал отправлять запросы AXIOS post с использованием text/plain and application/x-www-form-urlencoded . Оба работают по назначению, но мне нужно опубликовать данные в формате JSON. Когда я удаляю объект headers из AXIOS, он работает, но это потому, что заголовок по умолчанию application/x-www-form-urlencoded .

Итак, мой вопрос: как мне опубликовать объект с помощью AXIOS в формате JSON? потому что он автоматически сериализуется как JSON в соответствии с тем, что я прочитал!

Редактировать:

По-видимому, проблема не является эксклюзивной для AXIOS, я попробовал то же самое с FETCH API, и проблема сохраняется, код не будет работать, если я установлю Content-Type значение application/json

РЕДАКТИРОВАТЬ 2:

Он нормально работает как в cURL, так и в POSTMAN. Проблема по-прежнему связана с моим приложением.

Я попытался извлечь данные из jsonplaceholder.typicode, и это работает. Так что, возможно, проблема связана с NodeJS, но опять же она работала со всем, кроме моего клиентского кода. Абсолютно не понимаю, что происходит.

РЕДАКТИРОВАТЬ 3:

Это сработало после преобразования моего серверного файла из raw NodeJS в express, и это сработало. Так что, возможно, проблема в синтаксическом анализе данных JSON.

Комментарии:

1. Начните с того, что не JSON.stringify вводите его? 🙂

2. Пробовал, прежде чем его упорядочивать! По-прежнему нет результатов…

Ответ №1:

Для axios нам не нужно настраивать объект javascript.

 const jsonObj = { email, subject, body };

const config = {
    headers: {
        'Content-Type': 'application/JSON',                
    }
}

try {            
    const response = await axios.post('http://localhost:5000', jsonObj, config); 
                    
    console.log(response);
} catch (e) {            
    console.log(e);
}
 

Попробуйте node js code что-то вроде этого:

 function getPostData(req) {
    return new Promise((resolve, reject) => {
        try {
            let body = ''
            req.on('data', (chunk) => {
                body  = chunk.toString()
            })
            req.on('end', () => {
                resolve(body)
            })

        } catch (error) {
            reject(err)
        }
    })
}
const body = await getPostData(req);
const { email, subject, body} = JSON.parse(body)
        const product = {
            email,
            subject,
            body
        }

        res.writeHead(201, { 'Content-Type': 'application/json' })
        return res.end(JSON.stringify(product))
 

Комментарии:

1. Я попробовал это решение, прежде чем от отчаяния его упорядочить! к сожалению, не работает.

2. Попробуйте создать традиционный объект: const jsonObj = { email:’example@example.com ‘, тема: ‘образец’, тело: ‘Тело образца’ };

3. Я также отредактировал ответ для node js, проверьте это

4. Спасибо, но это тоже не сработало! по-прежнему нет ответа!