Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 August 14

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Я могу спарсить тело запроса и заголовки, из них сформировать нужный JSON в ответ, как в моем ответе выше. Но это я сам формирую ответ, а хочу отправить в том виде как мне пришел запрос, и не могу этого пока сделать.
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
let circObj = {
   name: "John",
   age: 23,
   gender: "Male"
}

circObj.myself = circObj

const replacerFunc = () => {
   const visited = new WeakSet();
   return (key, value) => {
     if (typeof value === "object" && value !== null) {
       if (visited.has(value)) {
         return;
       }
       visited.add(value);
     }
     return value;
   };
 };
 
 JSON.stringify(circObj, replacerFunc());
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
дело не в этом в отправляемом объекте не может быть циклических зависимостей
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
циклические зависимости создают своеобразную бесконечную рекурсию
источник

N

Nikita in NodeUA - JavaScript and Node.js in Ukraine
человек хочет сделать ехо сервер

на кой черт ему хак с сериализацией циклический обьектов?)
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Вот такое код я написал, в целом кажется, что это то что нужно:
'use strict';

const http = require('http');

const hostname = process.env.HOST || '0.0.0.0';
const port = process.env.PORT || 5000;

const server = http.createServer((req, res) => {
 let circObj = req;

 const replacerFunc = () => {
   const visited = new WeakSet();
   return (key, value) => {
     if (typeof value === 'object' && value !== null) {
       if (visited.has(value)) {
         return;
       }
       visited.add(value);
     }
     return value;
   };
 };

 console.log(JSON.stringify(circObj, replacerFunc()));
 res.statusCode = 200;
 res.end(JSON.stringify(circObj, replacerFunc()));
});

server.listen(port, hostname, () => {
 console.log(`Server running at http://${hostname}:${port}/`);
});

В ответе есть заголовки, но нет payload запроса. В запросе я отправляю JSON с данными, но их нет в ответе.
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Вот что я получаю в ответе, делая запрос через Postman: https://bit.ly/2VW0RbV
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Как правильнее сделать, напишите.
источник

N

Nikita in NodeUA - JavaScript and Node.js in Ukraine
не надо так, это лишнее
источник

N

Nikita in NodeUA - JavaScript and Node.js in Ukraine
это ок было
источник

N

Nikita in NodeUA - JavaScript and Node.js in Ukraine
просто можно response.body = data

тогда и будет вам "в том виде как оно на сервер пришло."
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Попробую сейчас.
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
не будет эхо работать
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
наверно в целях обучения рано брать такую задачу
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Нет, это не работает, у меня ошибка та же с circular, да и в любом случае, в том примере объект response я сам формирую, а мне нужно чтобы было как в запросе.

Вариант @Danwill кажется отличный, но почему-то я не вижу там тела запроса.
источник

АБ

Артур Бердыев... in NodeUA - JavaScript and Node.js in Ukraine
Вам сперва надо понять с чем вы работаете, что есть request, а что есть response под капотом, тогда все станет понятно.
На сайте ноды есть хорошая статься для начального погружения: https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/
И пример с echo там тоже есть)
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
Буду разбираться, почитаю, спасибо.
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
в том коде что я скидывал никакого тела запроса нет, я просто показал как сериализовать объект с циклическими ссылками, без такой сериализации его не получится отослать обратно клиенту (по сети передаются только байты не объекты)
источник

DL

Daniil Loban in NodeUA - JavaScript and Node.js in Ukraine
насчет payload нужно смотреть уже отдельно, какого типа запрос GET, POST ?
источник

AK

Alexandr Kazakov in NodeUA - JavaScript and Node.js in Ukraine
POST
источник