如何在 Node.js/TypeScript 中正确输入 Google Places 文本搜索(新)请求/响应?

问题描述 投票:0回答:1

我正在使用 TypeScript 开发 Node.js 应用程序,并且正在尝试集成 Google Places 文本搜索(新)API。我试图确保我的请求输入正确,但我在合并类型时遇到问题。

这是我目前拥有的一个基本示例:

import axios from 'axios';

const apiKey = 'MY_API_KEY';
const endpoint = `https://places.googleapis.com/v1/places:searchText`;

async function searchPlaces(query: string) {
    const payload = { textQuery: query };

    const response = await axios.post(endpoint, payload, {
        headers: {
            'Content-Type': 'application/json',
            'X-Goog-Api-Key': apiKey,
            'X-Goog-FieldMask': '*',
        },
    });

    return response.data;
}

我想知道:

  1. 如何定义请求参数和 Google Places API 响应的类型?
  2. 是否有任何现有的 TypeScript 定义或包可以帮助解决此问题?
  3. 从 Nodejs 中这样调用它是有效的方法吗?所有示例似乎都是基于客户端的,但我需要从服务器进行。

任何指导或示例将不胜感激!

typescript google-places-api
1个回答
0
投票

我发现了一个看似官方的 API 客户端包:https://www.npmjs.com/package/@googlemaps/places。要对其进行身份验证,您应该使用

google-auth-library

我通常会开始搜索官方 NPM 包注册表,如下所示:https://www.npmjs.com/search?q=Google%20Places%20API。在这种情况下,我跳过了 React 绑定的包,官方的 Google 包是之后的第一个包。

此代码应该适用于您的示例(未经测试):

import { PlacesClient } from "@googlemaps/places";
import { GoogleAuth } from "google-auth-library";

const apiKey = "MY_API_KEY";

const authClient = new GoogleAuth().fromAPIKey(apiKey);
const placesClient = new PlacesClient({
  authClient,
});

async function searchPlaces(query: string) {
  const payload = { textQuery: query };

  const [ response ] = await placesClient.searchText(payload, {
    otherArgs: {
      headers: {
        "X-Goog-FieldMask": "*",
      },
    },
  });

  return response.places;
}
© www.soinside.com 2019 - 2024. All rights reserved.