使用函数从REST API获取值

时间:2017-01-27 10:24:49

标签: javascript node.js rest

我正在尝试使用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);
});

你知道我该怎么做吗?

祝你好运

2 个答案:

答案 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);
    })
}