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

所以要获得 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 不存在或为空数组等情况下引发异常。