繁体   English   中英

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

How do I get the api_version parameter from a request in node.js?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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)
            }
    }
}

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

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const stripe = require('stripe')("sk_test_...");

stripe.setApiVersion('2018-11-08');

admin.initializeApp(functions.config().firebase);

exports.ephemeral_keys = functions.https.onRequest((req, res) => {
  const stripe_version = req.api_version;
  if (!stripe_version) {
    console.log('error with stripe version')
    console.log(stripe_version)
    res.status(400).end();
    return;
  }
  const uid = req.params.uid;
  const user = admin.firestore().collection('users').doc(uid);
  console.log('Customer id ' + user.customerId);

  stripe.ephemeralKeys.create(
    {customer: user.customerId},
    {stripe_version: stripe_version}
  ).then((key) => {
    console.log('Ephemeral key ' + key);
    res.status(200).json(key);
  }).catch((err) => {
    res.status(500).end();
  });
});
1 个回复

我对Alamofire的了解不多,但是通过阅读和搜索google,您可以做的是:

选项1

最好的约定是使用类似于以下内容的URL发出您的请求:

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将参数编码为查询字符串参数(有关此内容的更多信息,请阅读Stackoverflow文章

选项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约定)

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

1 如何访问Node.js中的Axios参数获取请求

我正在使用axios向API发送get请求,但是无法访问该请求中传递的参数。 这是我的代码:API请求 要求处理 没有给出任何参数时,路由工作正常。 console.log(req.params.category); 给输出未定义。 希望你有问题... ...

2 在node.js中限制API请求

首先,我是新来的,所以请...温柔......过去几个月我一直在教自己node.js,主要是希望从FlightAware网站API中获取大量数据。 我试图从他们的网站请求飞机的航班列表,这是我到目前为止。 此代码有效,但只要列表中有超过10架飞机,它就会失败,因为它会在一分钟内发送 ...

3 优化Node.js中的API请求

我在Node.js中有一个API。 我的路线看起来像 如示例中所示,我使用.catch(next) 。 但这是正确的方法吗? 不应该路线总是打印json? 所以我想做的事情就像 但它不应该像res.status(some_status_code).json({}) ? ...

4 .htaccess与API_VERSION进行比较

我正在努力使用htaccess文件。 我需要做的是在apache版本低于某个版本时执行重写规则,否则执行另一条规则。 这是关于apache 2.2.7中引入的反向引用的,但是我仍然需要支持较旧的apache版本。 我想做的是这样的: 我需要“ B”字样(如果有),有人知 ...

5 Node.js:从请求中获取路径

我有一个名为“localhost:3000/returnStat”的服务,它应该将文件路径作为参数。 例如“/BackupFolder/toto/tata/titi/myfile.txt”。 如何在我的浏览器上测试此服务? 例如,如何使用 Express 格式化此请求? ...

6 在node.js中获取查询参数

我有这样的网址: 我需要参数段的值。 我用: 但是该值是不确定的。 我尝试测试 但是输出仅为: 我也尝试过: 但是输出仅为: 我不知道参数部分发生了什么。 我想念什么吗? 请告诉我。 谢谢。 ...

7 Node.js获取请求

我使用js在html中呈现以下代码行 然后在node.js中,以下get请求方法 }); }); 该代码将呈现给所选用户页面,但是我如何才能仅将一个页面用于登录用户和所选用户。 ...

2017-06-05 17:55:05 1 39   node.js
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM