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

req.user is a list, I have to do req.user[0].prop to get data. Why is this happening?

之前我可以做 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' } ],

为什么会这样,是什么原因造成的?这是正常的吗?好像不在我的研究范围内。

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

var objectLiteral = {name: 'foo'};

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

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

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

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

如我所见,当前您拥有实体(用户)数组,因此您无法访问您的属性 req.user.propertie

为了获得一些道具。数组,您需要 select 此数组的特定项目,然后需要访问 属性.

问题可能与以下事实有关:之前您收到的是 jason 对象,现在是 json 个对象的数组。

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

要select特定项目,您需要按索引访问它:objects[0] //obj1

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

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

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

仍然不确定最初是什么导致它变成一个列表,因为它应该仍然只有 return 个结果...