无法使用 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 发出请求,那么我不会收到任何响应或错误。我不明白是什么问题。我尝试使用以下方法发出请求:request
、HTTPS
和 Axios
,但其中 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
我正在尝试使用 GitLab API 从 GitLab 读取数据。 API 工作正常,因为当我直接在 Chrome 浏览器中尝试时,我得到了 JSON
响应以及 Postman
.
如果我尝试使用 Node.js 向同一个 URL 发出请求,那么我不会收到任何响应或错误。我不明白是什么问题。我尝试使用以下方法发出请求:request
、HTTPS
和 Axios
,但其中 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