无法使用 Node.js 向 GitLab API 发出请求

Unable to make request to GitLab API using the Node.js

我正在尝试使用 GitLab API 从 GitLab 读取数据。 API 工作正常,因为当我直接在 Chrome 浏览器中尝试时,我得到了 JSON 响应以及 Postman.

如果我尝试使用 Node.js 向同一个 URL 发出请求,那么我不会收到任何响应或错误。我不明白是什么问题。我尝试使用以下方法发出请求:requestHTTPSAxios,但其中 none 没有工作也没有出错。

以下是我从 Node.js:

获得的相同代码

./index.js

const   express     =   require('express');
const   http        =   require("http");
const   bodyParser  =   require('body-parser');
const   app         =   express();
const   port        =   process.env.PORT || 9000;
const   gitlabDump  =   require("./controller/GitLabDump");

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true }));

//Make NodeJS to Listen to a particular Port in Localhost
app.listen(port, function(){
    var project = "gitlab";

    if(project.trim() === "gitlab"){
        //If porject is GitLab then fetch the data from Gitlab
        console.log("Fetching GitLab Data.......");

        gitlabDump.gitlabDump(type, function(data){
            console.log("Completed Execution for GitLab")
            process.exit();
        })
    }
}

我的./controller/GitLabDump.js:

const request = require('request');
const https = require('https');
const axios = require('axios');

exports.gitlabDump = function(callback){
    var gitlabAPI = "https://gitlab.com/api/v4/projects/<project_id>/repository/tree?ref=<target_branch>&path=path/to/subdirectory";

    console.log("BEFORE \n")

    request(gitlabAPI, function(error, response, body) {
        console.log("WITHIN RESPONSE")  
    })


    https.get(gitlabAPI, res => {
      console.log('Status Code:', res.statusCode);
      console.log('Date in Response header:', res);
    }).on('error', err => {
      console.log('Error: ', err.message);
    });

    axios.get(gitlabAPI).then(res => {
        console.log(res)
    })
    .catch(err => {
        console.log('Error: ', err.message);
    });

    console.log("AFTER \n")

    callback("Completed");
}

我从我的命令行 运行 应用程序:

node index.js

我收到回复:

BEFORE 

AFTER 

Completed

这意味着它不会进入任何请求,也不会收到任何错误。仍然停留在这个问题上。任何帮助将不胜感激。提前致谢。

您遇到的问题是您正在使用 process.exit() 并且此函数结束程序,如您所见 here

解决方法:删除process.exit()

Javascript 是异步的,当您读取文件或发送 http 请求时,这些操作需要一段时间...同时 javascript 执行函数下面的所有代码...所以如果你用 process.exit() 终止程序,你不是在等待函数结束...

如果你想脚本结束,终端从node退出你不需要使用express,只需如下创建一个文件,直接用node执行:

const request = require('request');
const https = require('https');
const axios = require('axios');

const gitlabDump = function(callback){
    var gitlabAPI = "https://gitlab.com/api/v4/projects/<project_id>/repository/tree?ref=<target_branch>&path=path/to/subdirectory";

    console.log("BEFORE \n")

    request(gitlabAPI, function(error, response, body) {
        console.log("WITHIN RESPONSE")  
    })


    https.get(gitlabAPI, res => {
      console.log('Status Code:', res.statusCode);
      console.log('Date in Response header:', res);
    }).on('error', err => {
      console.log('Error: ', err.message);
    });

    axios.get(gitlabAPI).then(res => {
        console.log(res)
    })
    .catch(err => {
        console.log('Error: ', err.message);
    });

    console.log("AFTER \n")

    callback("Completed");
}

gitlabDump(function(data){
    console.log("Completed Execution for GitLab")
})

执行 shell 中的下一个命令(bash,cmd 或 powershell)

  node filename.js