在 NodeJS 中获取我的 google 帐户个人资料图片 (URL) 的正确方法是什么
what is the proper way to get my google account profile image (URL) in NodeJS
请参阅下面的错误消息和源代码,即使我添加了照片的人物字段后也不起作用:
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
request returns a 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
不存在或为空数组等情况下引发异常。
请参阅下面的错误消息和源代码,即使我添加了照片的人物字段后也不起作用:
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
request returns a 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
不存在或为空数组等情况下引发异常。