在NodeJS中获取我的谷歌帐户配置文件图像(URL)的正确方法是什么



请参阅下面的错误消息和源代码,即使在我添加了照片的个人字段后也不起作用:

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", ...}],
...
}

因此,要获得namepicture,首先,您需要请求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不存在或是空数组,则此代码不会遇到异常。

最新更新