请参阅下面的错误消息和源代码,即使在我添加了照片的个人字段后也不起作用:
TypeError: Cannot read properties of undefined (reading 'url')
var p = google.people("v1");
p.people.get(
{
resourceName: "people/me",
personFields: "names,emailAddresses,photos",
auth: oauth2Client,
},
function (err, user) {
if (err) { return; }
res.json({
name: encoder.htmlEncode(user.displayName),
picture: user.image.url,
});
}
);
您应该了解一下这些文档。people.get
请求返回一个Person
对象。这样的Person
没有image
属性,因此您无法访问user.image.url
,因为user.image
不存在。user.displayName
也没有,顺便说一句
Person
的实际外观如下(...
意味着还有其他属性,如果需要更多,请在文档中查找(
{
...
coverPhotos: [{url: "https://url.to/image", ...}],
...
names: [{ displayName: "John Doe", ...}],
...
}
因此,要获得name
和picture
,首先,您需要请求coverPhotos
,而不是photos
。然后您可以提取所需的值,如下所示:
p.people.get(
{
resourceName: "people/me",
personFields: "names,emailAddresses,coverPhotos",
auth: oauth2Client,
},
function (err, user) {
if (err) { return; }
let
name = user.names?.[0]?.displayName || "John Doe",
url = user.coverPhotos?.[0]?.url
res.json({
name: encoder.htmlEncode(name),
picture: user.image.url,
});
});
我在这里使用了条件链接?.
,以确保如果例如coverPhotos
不存在或是空数组,则此代码不会遇到异常。