【问题标题】:How to get the id from the path parameter of an HTTP request in Cloud Functions (nodejs)如何从 Cloud Functions (nodejs) 中 HTTP 请求的路径参数获取 id
【发布时间】:2021-08-02 12:43:42
【问题描述】:

我目前正在使用 GCP Cloud Functions (nodejs) 开发无服务器应用程序。 在下面的代码中,我可以根据请求的方法分离行为,但是 不知道怎么获取path参数的id。

例如,如果我想检索一个用户,路径将是 /users/:id。 我想检索路径中的 id 并搜索数据库,但我被卡住了,因为我无法检索到 id。 (也可以放置和删除) 有人知道吗?

我以为我可以用 req.params.id 得到它,但我想不是......

import type {HttpFunction} from '@google-cloud/functions-framework/build/src/functions';

export const httpServer: HttpFunction = (req, res) => {
  const path = req.path;
  switch(path) {
    case '/users' :
      handleUsers(req, res);
      break;
    default: 
      res.status(200).send('Server is working');
  }
};

const handleUsers: HttpFunction = (req, res) => {

  if (req.method === 'GET') {
    res.status(200).send('Listing users...');
  } else if (req.method === 'POST') {
    res.status(201).send('Creating User...')
  } else if (req.method === 'PUT') {
    res.status(201).send('Updating User...')
  } else if (req.method === 'DELETE') {
    res.status(201).send('Delating User...')
  } else {
    res.status(404);
  }
}


export const helloWorld: HttpFunction = (req, res) => {
  res.send('Hello, World');
};

还有一个问题。

例如,如果当前 swich 语句中的路径为“/users/1”,则不会调用 handleUsers。所以我们也想解决这个问题。

另外,未来可能会有类似“/users/1/hogehoge”这样的路径......

【问题讨论】:

    标签: node.js typescript express google-cloud-functions


    【解决方案1】:

    您需要使用request 的Express params 属性,但您必须注意文档中详述的以下选项:当使用正则表达式进行路由定义时,“捕获组在使用req.params[n] 的数组,其中n 是第n 个捕获组”。

    所以以下应该可以工作:

    req.params[0]


    req.params实际上返回{ '0': '...' }

    【讨论】:

    • 感谢您的回答。当我查看 req.params[0] 时,它返回 'users/1'。有没有办法只得到这个的 id 部分?比如我在使用Express路由器的时候,可以从req.params.id中获取id,我也想做同样的事情。
    • 恐怕你需要使用str.split('/') 并取返回数组的第二个元素。
    • 感谢您的回答。我可以通过这种方式获得身份证。但是,还有另一个问题。例如,如果当前 swich 语句中路径为“/users/1”,则不会调用handleUsers。所以我们也想解决这个问题。另外,未来可能会有类似'/users/1/hogehoge'这样的路径......
    • 您可能会针对这些新细节提出新问题。添加尽可能多的细节,尤其是确切的路径。如果它解决了您最初的问题,您可以接受并投票赞成这个答案。
    • 谢谢。我暂时结束这个问题。
    猜你喜欢
    • 2021-08-22
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2021-05-25
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多