使用 Node.js 调用 API 时遇到的问题

大家好!

不确定该帖子属于哪个分类,欢迎随时重新分类。首先,感谢大家帮助我完成一个 Python 脚本,它的功能与我正在编写的 Node.js 脚本相同 :clap:t3:。我的目标是向 API 发送请求,执行数据探索器查询,接收响应,并简单显示从中获取的数字。我的 Python 代码已经可以正常工作,代码如下:

# 导入模块

import requests
import json

# 环境变量

ENDPOINT = 'https://community.myCompanyName.com/admin/plugins/explorer/queries/73/run'
API_KEY = '<api_key>'
API_USERNAME = '<my_username>'

# 核心函数

def send_request(endpoint):

    headers = {'Content-Type': 'multipart/form-data', 'Api-Key': API_KEY, 'Api-Username': API_USERNAME}
    request = requests.post(url = endpoint, headers = headers)
    print("请求状态码:{}".format(request.status_code))

    # 未处理的 API 响应

    response = json.loads(request.text)

    response_columns = response["columns"]
    response_rows = response["rows"]

    new_users = response_rows[0][0]
    active_users = response_rows[0][1]
    new_topics = response_rows[0][2]
    employees_replies = response_rows[0][4]
    external_users_replies = response_rows[0][3] - response_rows[0][4]

    response_text = "🤖 Discourse 上月统计\n新用户:{}\n活跃用户:{}\n新话题:{}\n员工回复:{}\n外部用户回复:{}".format(new_users, active_users, new_topics, employees_replies, external_users_replies)

    return response_text

processed_response = send_request(ENDPOINT)

我尝试将其移植到 Node.js,但收到了 301 状态码——“永久移动”,而且看起来它执行的操作与我的 Python 代码完全相同。代码如下:

const http = require('http');

const options = {
  hostname: 'community.myCompanyNamee.com',
  path: '/admin/plugins/explorer/queries/73/run',
  method: 'POST',
  headers: {
    'Content-Type': 'multipart/form-data',
    'Api-Key': <api_key>,
    'Api-Username': <my_username>
  }
};

var response = 1;

const req = http.request(options, (res) => {
  console.log(`状态码:${res.statusCode}`);
  response = res;

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

var parsed_response = JSON.parse(response);

我对 JavaScript 没有经验,如果有人能帮忙看一下,那就太好了 :slight_smile:

明白了。这是解决方案代码:


const http = require('https');

const options = {
  hostname: 'community.myCompanyName.com',
  path: '/admin/plugins/explorer/queries/73/run',
  method: 'POST',
  headers: {
    accept: 'application/json',
    'Content-Type': 'multipart/form-data',
    'Api-Key': '<api_key>',
    'Api-Username': '<my_username>'
  }
};

var response = 1;

const req = http.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`);
  response = res;

  res.on('data', (d) => {
    process.stdout.write(d);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.end();

var parsed_response = JSON.parse(response);
console.log(parsed_response);