Как записать express req объект в файл? - PullRequest
0 голосов
/ 17 марта 2020

Итак, я хочу получить некоторые данные о пользователе из объекта req, но при его выводе терминал не отображает весь объект.

Я пробовал несколько решений при записи файла Кажется, что часть работает при использовании fs = require ('fs'), но я не могу структурировать объект запроса, так как файл показывает [object, object] только при записи в файл.

код ниже показывает, как я Пытаюсь сохранить в файл

router.get("/:shortUrl", async (req, res) => {
  const result = JSON.stringify(req);
  console.log(result)

  fs.writeFile("result.txt", result, err => {
    if (err) throw err;
    console.log('File successfully written to disk');
  }); 
});

Ошибка, которую я получаю из JSON .stringify выглядит так.

UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Socket'
    |     property 'parser' -> object with constructor 'HTTPParser'
    --- property 'socket' closes the circle
    at JSON.stringify (<anonymous>)

Любые идеи о том, где я с этим не так.

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Использование метода express предоставляет вам параметры объекта запроса.

Таким образом, вместо записи всего объекта вы можете получить доступ к параметрам этого объекта и записи в файл .txt

router.get("/:shortUrl", async (req, res) => {

    const result = req.params.shortUrl;

    console.log(result)

    fs.writeFile("result.txt", result, err => {
    if (err) throw err;
      console.log('File successfully written to disk');
    }); 
 });

Я сомневаюсь что вам нужен целый объект.

0 голосов
/ 17 марта 2020

Так что, похоже, до круглого json приведенный ниже пример должен помочь любому, кто тоже сталкивался с этой проблемой. Это вспомогательная функция, которая отключает объект, чтобы сделать его строковым.

  function decycle(obj, stack = []) {
    if (!obj || typeof obj !== 'object')
        return obj;

    if (stack.includes(obj))
        return null;

    let s = stack.concat([obj]);

    return Array.isArray(obj)
        ? obj.map(x => decycle(x, s))
        : Object.fromEntries(
            Object.entries(obj)
                .map(([k, v]) => [k, decycle(v, s)]));
  }

  const result = JSON.stringify(decycle(req));

  fs.writeFile("result.txt", result, err => {
    if (err) throw err;
    console.log('File successfully written to disk');
  }) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...