Express / Node.js路由无法获取对象中的键

时间:2018-10-19 23:21:50

标签: javascript node.js express get

我试图在node / express中创建一条路由,以从mongo db集合中获取数据,并且遇到了一个非常令人沮丧的问题。我有一个名为case的集合,并尝试编写以下路线:

select avg(case when a > 2 then 1.0 else 0 end)
from t;

我删除了其余不重要的GET。当我启动节点,并在本地主机上的浏览器URL中输入路由时,我在终端中收到以下输出:

nba_players_v2

很显然,router.get('/shotcharts-v2/player/:player/season/:season', function(req, res) { let player_id = req.params.player; let season_id = req.params.season; console.log('playerid:', player_id, ' seasonid:', season_id); db.nba_players_v2.findOne({'_id': player_id}, function(err, player) { if (err) res.send(err); if (player) { console.log('player', player) console.log('typeof', typeof(player)) console.log('keys', Object.keys(player)) console.log('player firstname', player.firstName) let i = 0; for (var prop in player) { console.log(i, ': ', prop) } ... } } } 函数正在工作,因为Express server is up and running on 8080 or process.env.PORT! playerid: 9218 seasonid: 1617 player { _id: '9218', firstName: 'Stephen', lastName: 'Curry', birthDate: '1988-03-14', birthCity: 'Akron, OH', birthCountry: 'USA', highSchool: 'Charlotte Christian', college: 'Davidson College', officialImageSrc: 'https://ak-static.cms.nba.com/wp-content/uploads/headshots/nba/latest/260x190/201939.png', handednessShoots: 'R', FullName: 'Curry-Stephen' } typeof object keys [ '$__', 'isNew', 'errors', '_doc', '$init' ] player firstname undefined 1 ': ' '$__' 2 ': ' 'isNew' 3 ': ' 'errors' 4 ': ' '_doc' 5 ': ' '$init' 6 ': ' 'db' 7 ': ' 'discriminators' 8 ': ' '__v' 9 ': ' 'id' 10 ': ' 'schema' 11 ': ' 'collection' 12 ': ' '$__save' 13 ': ' '$__validate' 14 ': ' '$__remove' 15 ': ' '$__init' 16 ': ' '$isMongooseModelPrototype' 17 ': ' '$__handleSave' 18 ': ' 'save' 19 ': ' '$__delta' 20 ': ' '$__version' 21 ': ' 'increment' 22 ': ' '$__where' 23 ': ' 'remove' 24 ': ' 'model' 25 ': ' 'on' 26 ': ' 'once' 27 ': ' 'emit' 28 ': ' 'listeners' 29 ': ' 'removeListener' 30 ': ' 'setMaxListeners' 31 ': ' 'removeAllListeners' 32 ': ' 'addListener' 33 ': ' '$__buildDoc' 34 ': ' 'toBSON' 35 ': ' 'init' 36 ': ' 'update' 37 ': ' '$set' 38 ': ' 'set' 39 ': ' '$__shouldModify' 40 ': ' '$__set' 41 ': ' 'getValue' 42 ': ' 'setValue' 43 ': ' 'get' 44 ': ' '$__path' 45 ': ' 'markModified' 46 ': ' 'unmarkModified' 47 ': ' '$ignore' 48 ': ' 'modifiedPaths' 49 ': ' 'isModified' 50 ': ' '$isDefault' 51 ': ' '$isDeleted' 52 ': ' 'isDirectModified' 53 ': ' 'isInit' 54 ': ' 'isSelected' 55 ': ' 'isDirectSelected' 56 ': ' 'validate' 57 ': ' 'validateSync' 58 ': ' 'invalidate' 59 ': ' '$markValid' 60 ': ' '$isValid' 61 ': ' '$__reset' 62 ': ' '$__dirty' 63 ': ' '$__setSchema' 64 ': ' '$__getArrayPathsToValidate' 65 ': ' '$__getAllSubdocs' 66 ': ' '$__handleReject' 67 ': ' '$toObject' 68 ': ' 'toObject' 69 ': ' 'toJSON' 70 ': ' 'inspect' 71 ': ' 'toString' 72 ': ' 'equals' 73 ': ' 'populate' 74 ': ' 'execPopulate' 75 ': ' 'populated' 76 ': ' 'depopulate' 77 ': ' '$__fullPath' 正在打印出玩家的对象(在这种情况下,有关Steph Curry的一些信息)。但是,当我尝试findOne()的名字(在console.log(player)中为是关键字)时,我收到未定义的信息。

player.firstName返回未定义并不是特别重要,但是在此console.log()函数的其余部分中使用的其他键也返回未定义。

这是数据库中nba_players_v2集合内相关对象(Steph的对象)的屏幕快照(Robo 3T的屏幕截图): enter image description here

如果不解决此问题,我将无法使我的应用正常运行,因此请帮助。让我知道我是否可以分享任何其他信息(有助于解决此问题)(更多player)!我是Web开发人员的新手,我很难独自管理整个堆栈,而这样的错误无济于事!

编辑:mongo DB _id是否仅在单个集合中需要唯一,或者在整个数据库中必须唯一?不太可能是问题,只是在想...

Edit2:数据库中的_id键应该为router.get类型,而不是console.log()类型吗?我手动创建了_id列(在R中,在使用mongolite插入mongo db之前),并且显然在这里键入string。

3 个答案:

答案 0 :(得分:2)

在使用猫鼬时,findOne返回到回调Document对象。如果要使用名字,则必须使用get向文档询问。

player.get('firstName')

答案 1 :(得分:1)

对不起,但是我无法将此添加为评论,因为我对此没有声誉。

您确定玩家是这里的物体吗?在我看来,这是一个无法解析的json字符串,因此没有键。

答案 2 :(得分:0)

了解

enter image description here

在我的应用程序的models目录中,这就是我收藏中大多数模式的样子。对于大多数集合来说都可以,但是对于nba_players_v2集合(或在routes文件中使用的其他集合)来说,这没关系。