我正在尝试使用nodeJS和express来创建一个返回REST API响应的函数。 这是我的代码片段:
var express = require('express')
var httpRequest = require('request');
var bodyParser = require('body-parser');
var app = express()
function getData1() {
request('http://www.my-server.com/data', function (error, response, body) {
if (!error && response.statusCode == 200) {
return body;
}
})
}
app.get('/get-data', function (request, response) {
var data1 = getData1();
//do something with data
response.send(data1);
});
你知道我该怎么做吗?
祝你好运
答案 0 :(得分:1)
由于getData1
包含一个异步函数,它只在完成时返回数据,只是将一个回调函数传递给它,当异步函数完成时你将调用该函数
// callback -> the function you will call later
function getData1(callback) {
request('http://www.my-server.com/data', function (error, response, body) {
if (!error && response.statusCode == 200) {
// call the function when the function finishes and also passed the `body`
return callback(body);
}
})
}
app.get('/get-data', function (request, response) {
getData1(function(data1) {
//do something with data
response.send(data1);
})
});
答案 1 :(得分:1)
始终在NodeJS中使用回调
回调是函数的异步等价物。在给定任务完成时调用回调函数。 Node大量使用回调。 Node的所有API都以支持回调的方式编写。
以下代码将有效。您试图访问一些REST API甚至没有返回的数据,因此回调将确保代码的某些部分仅在REST API给您一些响应时运行。
const express = require('express')
const httpRequest = require('request');
const bodyParser = require('body-parser');
const app = express()
app.get('/get-data', function (request, response) {
getDataFromRest(function(dataFromRESTApi) {
if(dataFromRESTApi === null) {
return;
}
response.send(dataFromRESTApi);
});
});
function getDataFromRest(callback) {
request('http://www.my-server.com/data', function (error, response, body) {
if (error || response.statusCode !== 200) {
callback(null);
return;
}
callback(body);
})
}