req.user是一个列表,我必须做req.user [0] .prop来获取数据。为什么会这样?

时间:2015-07-28 21:30:12

标签: javascript node.js express passport.js

在我能够req.user.property获取数据之前,我突然失败了,我必须req.user[0].property才能获取数据。

基本上req.user是一个列表。它看起来像这样......

user: 
[ { _id: '934715373258035',
   active: true,
   date: 'July 1st 2015, 1:44:49 am',
   email: 'username@emailprovider.com',
   genre: '53d8fcd1ea70ad64d6655fa8',
   location: '53d8ff38ea70ad64d6655fbb',
   name: 'First Last',
   pass: 'QAt9tSGDpft7iSxwoa5gsTO63ONXshREQmkE8F6MKqRA6IIn2Eo49Z5vZFqKushX' } ],

这是为什么以及导致它的原因?这是正常的吗?它似乎没有出现在我的研究中。

3 个答案:

答案 0 :(得分:0)

听起来req.user.property已经从对象文字变为数组。在对象文字中,您可以按名称访问该属性。

var objectLiteral = {name: 'foo'};

objectLiteral.name === 'foo' // true

在数组中,您必须按索引访问成员。

var arrayOfObjectLiterals = [{name: 'foo'}, {name: 'bar'}]

arrayOfObjectLiterals[0].name === 'foo' // true

答案 1 :(得分:0)

正如我所看到的,目前您拥有一系列实体(用户),因此您无法访问自己的属性req.user.propertie

为了获得一些道具。对于数组,您需要为此数组选择特定项,然后访问所需的属性。

可能这个问题与之前你收到jason对象的事实有关,现在它是json对象的数组。

实施例 数组:var objects = [obj1][obj2][obj3];

要选择您需要通过索引访问的特定项目:objects[0] //obj1

然后您可以访问'obj1'的属性:objects[0].someProp

答案 2 :(得分:0)

为了强制req.user成为对象(而不是列表中的对象),我更改了passport.deserializeUser函数以运行命令db.users.findOne()而不是db.users.find()。< / p>

这只返回第一个结果,并允许req.user等于一个对象,而不是包含该对象的列表。

仍然不确定最初是什么导致它转入列表,因为它仍然只能返回一个结果......