#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. Спасибо, но это тоже не сработало! по-прежнему нет ответа!