【问题标题】:Pass the apiKey got from a POST to a GET request in node.js将 POST 获取的 apiKey 传递给 node.js 中的 GET 请求
【发布时间】:2020-09-24 16:36:36
【问题描述】:

在 nodejs 中,我能够成功地发出 POST 请求并获得 API 密钥。我需要通过 GET 重新使用此 API 密钥以获取更多请求。如何在后续的 GET 请求中重用从初始 POST 请求获得的 apiKey 结果?

任何帮助将不胜感激。谢谢!!

var request = require('request');

var uri = 'example.com';
var user = 'user';
var pass = 'password';
var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9";

//POST
request.post(
  {
    headers: {'content-type' : 'application/x-www-form-urlencoded'},    
    url: uri,   
    rejectUnauthorized: false,      
    form: { email: user, username: user, password: pass, trustToken: token }
  },
  function(err, httpResponse, body) {
    if (err) {
      return console.error('post failed:', err);
    }

    var obj = JSON.parse(body);
    //authToken = json.data.authToken;
    //userId = json.data.userId;
    console.log('Post successful!  Server responded with:', body);
    
    var keys = Object.keys(obj);
    apiKey = obj[keys[0]];
   }  
);


//GET
var Token = {{apiKey}};
console.log(Token);


const options = {
    url: 'https://example.com/ask/search/docs',
    method: 'GET',
    headers: {
        'Accept': 'application/json',
        'Accept-Charset': 'utf-8',
        'User-Agent': 'my-reddit-client'
    },
    
    form: { 
            apiToken: {{apiKey}}, 
            question: "change probability", 
            stopWords: "false",
            language: "en",
            start: "0",
            rows: "2",
            project:{"projectId":"1752","projectName":"Mars"}
        }
};

request(options, function(err, res, body) {
    let json = JSON.parse(body);
    console.log(json);
});

【问题讨论】:

    标签: node.js post get


    【解决方案1】:

    您可以在请求标头中设置密钥并随每个请求发送。

    const options = {
    url: 'https://example.com/ask/search/docs',
    method: 'GET',
    headers: {
        'Accept': 'application/json',
        'Accept-Charset': 'utf-8',
        'User-Agent': 'my-reddit-client',
        'x-auth-token': Token
    },
    
    form: { 
            question: "change probability", 
            stopWords: "false",
            language: "en",
            start: "0",
            rows: "2",
            project:{"projectId":"1752","projectName":"Mars"}
        }
    

    };

    然后你可以在你的服务器上有一个代码,基本上是一个中间件,从请求中提取它并验证请求。

    您可以将令牌保存在会话存储中。如果您打算像 Facebook 等一样将令牌保持多天,那么您可以使用 HTTP 安全 cookie。

    【讨论】:

    • 感谢您的回复。对不起,我想我的问题有点模棱两可。我的意思是我无法在 POST 函数之外获取 apiKey 的值。我收到以下错误: var Token = apiKey; ^ ReferenceError: apiKey 未定义
    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 2018-09-21
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2016-07-11
    相关资源
    最近更新 更多