如何在Visual Studio终端中摆脱[Object:null prototype]?

时间:2018-12-05 15:50:35

标签: terminal visual-studio-code

有没有一种方法可以消除终端机中的“ [Object:null prototype]”,因此它仅显示{title:'book'}?

我正在做console.log(req.body);在node / express.js

terminal

5 个答案:

答案 0 :(得分:1)

当我们console.log一些具有 null 原型的对象...

时,Node中出现了另一个 [对象:null原型] 问题。

这只是意味着对象将没有内置方法...例如=> .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 < / strong>库

当我们将其设置为false时,它由 query-string 库进行解析...

在查询字符串库(https://nodejs.org/api/querystring.html#querystring_querystring_parse_str_sep_eq_options

它明确指出

querystring.parse()方法返回的对象从原型上不继承自JavaScript对象。这意味着诸如obj.toString(),obj.hasOwnProperty()之类的典型对象方法尚未定义,将无法使用。

或者换句话说,他们有空原型 ...

这就是为什么当我们在console.log(req.body)=>输出时使用{extended:false}时,在开始时输出包含其他 [Object:null prototype] 的原因...

对于其他差异,请使用

what the difference between qs and querystring

答案 1 :(得分:0)

您可以使用以下内容:

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

答案 2 :(得分:0)

您可以使用以下内容:

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

最后一个参数控制用于缩进的空格数。

答案 3 :(得分:0)

这听起来像是您在解析正文时在.urlencoded()中使用{extended: false}。尝试将其删除或更改为true。

返回几步并进行编辑,可能看起来像这样

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

或者只是

app.use(bodyParser.urlencoded());

要了解有关扩展选项的更多信息,请阅读文档或此处的某人回答得很好-What does 'extended' mean in express 4.0?

答案 4 :(得分:0)

尝试一下,它对我有用

let payLoad = [];
Reflect.ownKeys(req.body).forEach(key => {
          payLoad = JSON.parse(key);
        });