如何从node.js中的请求获取api_version参数?

时间:2018-11-15 00:33:52

标签: node.js firebase google-cloud-functions

这是我在Swift中发送的请求:

theme

这是我要执行的云函数。 “ api_version”作为参数传递,但是api_version在firebase日志中未定义。如何获得api_version?我在做什么错了?

func createCustomerKey(withAPIVersion apiVersion: String, completion: @escaping STPJSONResponseCompletionBlock) {
    let url = self.baseURL.appendingPathComponent("ephemeral_keys")
    let params: Parameters = [
        "api_version":apiVersion,
        "uid":Model.shared.uid
        ]
    Alamofire.request(url, method: .post, parameters: params)
        .validate(statusCode: 200..<300)
        .responseJSON { responseJSON in
            switch responseJSON.result {
            case .success(let json):
                completion(json as? [String: AnyObject], nil)
            case .failure(let error):
                completion(nil, error)
            }
    }
}

1 个答案:

答案 0 :(得分:0)

我对Alamofire知之甚少,但是通过阅读一些有关它并搜索google的信息,您可以做的是:

选项1

最好的惯例是使用类似于以下内容的网址来发出您的请求:

http://server-host-name:<port>/someName/api_version/2.0/getDataApi

在节点服务器端执行此操作:

exports.ephemeral_keys = functions.https.onRequest((req, res) => {
  const stripe_version = req.query.api_version;
  // Do what ever you want with it...
  // ...
}

选项2

使用api_version作为查询字符串参数,因此在您的情况下,我认为您做错了,请在客户端代码中尝试以下操作:

 let params: Parameters = [
        "api_version":apiVersion,
        "uid":Model.shared.uid
        ]
    Alamofire.request(url, method: .post,
        parameters: params,
        encoding: URLEncoding(destination: .queryString))

这是为了告诉Alamofire将参数编码为查询字符串参数(有关此内容的更多信息,this Stackoverflow post

选项3

或将api版本放在自定义HTTP标头中,如下所示:

let headers: HTTPHeaders = [
  "api_version": MY_API_KEY,
  "Accept": "application/json"
]

Alamofire.request(yourURL, headers: headers)
  .responseJSON { response in
  debugPrint(response)
}

并尝试像这样在节点服务器端吸引它:

const stripe_version = req.headers.api_version;

顺便说一句,我最好的选择是选项1(最好符合REST API约定)

(未经测试) 检查并告诉我们这是否对您有用!