在我能够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' } ],
这是为什么以及导致它的原因?这是正常的吗?它似乎没有出现在我的研究中。
答案 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等于一个对象,而不是包含该对象的列表。
仍然不确定最初是什么导致它转入列表,因为它仍然只能返回一个结果......