我的Node.js测试设置有问题。我基本上想要一个我可以调用的端点,这个端点可以调用不同的其他端点并给我一个JSON作为响应。当我看一下performRequest函数的控制台输出时,一切看起来都不错。但是这个函数的返回没有通过。我总是得到一个空的{}作为回应。
保存我路线的routes.js:
var s24 = require("./s24");
var routes = function(app) {
app.get("/ping", function(req, res) {
res.send("<p>pong</p>");
console.log("Received GET");
});
app.get("/getCategories", function(req, res) {
var output = s24.getCategories();
res.type('application/json');
return res.send(output);
});
};
module.exports = routes;
查询另一个REST-API的s24.js:
var functions = require('./functions');
var appID = "XYZ";
var authorization = "ABC";
var getCategories = function () {
var output = functions.performRequest("https://api.s24.com/v3/"+appID+"/categories", authorization);
console.log(output);
return output;
};
module.exports.getCategories = getCategories;
包含所有相关功能的functions.js:
var unirest = require('unirest');
var performRequest = function(endpoint,authorization,body) {
unirest.get(endpoint)
.headers({'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': authorization})
.send(body)
.end(function (response) {
var data = response.body;
console.log(data);
return data;
});
};
module.exports.performRequest = performRequest;
答案 0 :(得分:0)
performRequest
是一个异步函数,通常在node.js中,你不能只返回异步函数的响应。您可以将async await
功能与babel一起使用,但最简单的方法就是使用callbacks
或promises
。
您的代码应如下所示:
var performRequest = function (endpoint, authorization, body, callback) {
unirest.get(endpoint)
.headers({
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': authorization
})
.send(body)
.end(function (err, response) {
var data = response.body;
callback(data["id"]);
});
}
var getCategories = function () {
var output = functions.performRequest(
"https://api.s24.com/v3/" + appID + "/categories",
authorization,
function (output) {
console.log(output);
});
};
正如您所看到的,将回复从一个回调转移到另一个回调看起来很难看,所以我建议您重新考虑您的设计。