Как мне избавиться от [Object: null prototype] в терминале Visual Studio? - PullRequest
0 голосов
/ 05 декабря 2018

Есть ли способ избавиться от [Object: null prototype] в терминале, чтобы он отображал только {title: 'book'}?

Я делал console.log(req.body); в node / express.js

terminal

Ответы [ 4 ]

0 голосов
/ 24 июня 2019

Эта дополнительная [Object: null prototype] проблема возникает в Node, когда мы console.log некоторого объекта, который имеет null prototype ...

, что просто означаетчто у объекта не будет встроенных методов ... типа => .toString () или .hasOwnProperty () и т. д. *

const obj1 = Object.create(null);
obj1['key'] = 'SomeValue' ;
console.log(obj1); 
>> [Object: null prototype] { 'key' : 'SomeValue' }

const obj2 = {};
obj2['key'] = 'SomeValue' ;
console.log(obj2); 
>> { 'key' : 'SomeValue' } 

, когда мы устанавливаем расширенный в app.use (Параметр urlencoded {...}) для true => закодированные данные URL анализируются библиотекой qs ,

, когда мы устанавливаем значение false,он анализируется строкой запроса библиотекой ...

в библиотеке строк запросов (https://nodejs.org/api/querystring.html#querystring_querystring_parse_str_sep_eq_options)

, в нем четко указано, что

Объект, возвращаемый методом querystring.parse () , не наследуется прототипом от объекта JavaScript.Это означает, что типичные методыObject, такие как obj.toString (), obj.hasOwnProperty () и другие, не определены и не будут работать.

или, другими словами, они имеют нулевой прототип ...

, поэтому в случае {extended: false}, когда мы console.log (req.body) => вывод содержит дополнительный [Object: null prototype] в начале...

Для других отличий используйте

в чем разница между qs и строкой запроса

0 голосов
/ 09 декабря 2018

Вы можете использовать следующее:

console.log(JSON.stringify(req.body, null, 2));

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

0 голосов
/ 26 мая 2019

Звучит так, как будто вы используете {extended: false} в .urlencoded (), когда анализируете тело.Попробуйте удалить его или изменить на true.

Вернитесь на несколько шагов назад и отредактируйте, что может выглядеть примерно так

app.use(bodyParser.urlencoded({extended: true}));

или просто

app.use(bodyParser.urlencoded());

Чтобы узнать больше о расширенном параметре, прочитайте документы или кто-то здесь хорошо на него ответил - Что означает «расширенный» в Express 4.0?

0 голосов
/ 06 декабря 2018

Вы можете использовать что-то вроде этого:

Reflect.ownKeys(obj).forEach(key => {
  console.log(key + ":" + obj[key]);
});
...