[rest] Node.js에서 원격 REST 호출을 수행하는 방법은 무엇입니까? 어떤 CURL?

CURL 호출 을하기 위해 자식 프로세스를 사용하는 것 이외의 Node.js 에서는 원격 서버 REST API 에 대한 CURL 호출을 수행 하고 반환 데이터를 얻는 방법이 있습니까?

또한 원격 REST 호출에 요청 헤더를 설정하고 GET (또는 POST)에서도 쿼리 문자열 을 설정해야합니다 .

나는 이것을 발견한다 : http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs

그러나 쿼리 문자열을 POST하는 방법은 표시되지 않습니다.



답변

보다 http.request

var options = {
  host: url,
  port: 80,
  path: '/resource?id=foo&bar=baz',
  method: 'POST'
};

http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
}).end();


답변

어떻게 사용에 대한 요청 – 단순화 된 HTTP 클라이언트를 .

2020 년 2 월 편집 : 요청이 더 이상 사용되지 않으므로 더 이상 사용하지 않아야합니다.

다음은 GET입니다.

var request = require('request');
request('http://www.google.com', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body) // Print the google web page.
     }
})

OP는 POST를 원했습니다.

request.post('http://service.com/upload', {form:{key:'value'}})


답변

http://isolasoftware.it/2012/05/28/call-rest-api-with-node-js/를 보십시오

var https = require('https');

/**
 * HOW TO Make an HTTP Call - GET
 */
// options for GET
var optionsget = {
    host : 'graph.facebook.com', // here only the domain name
    // (no http/https !)
    port : 443,
    path : '/youscada', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

console.info('Options prepared:');
console.info(optionsget);
console.info('Do the GET call');

// do the GET request
var reqGet = https.request(optionsget, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);


    res.on('data', function(d) {
        console.info('GET result:\n');
        process.stdout.write(d);
        console.info('\n\nCall completed');
    });

});

reqGet.end();
reqGet.on('error', function(e) {
    console.error(e);
});

/**
 * HOW TO Make an HTTP Call - POST
 */
// do a POST request
// create the JSON object
jsonObject = JSON.stringify({
    "message" : "The web of things is approaching, let do some tests to be ready!",
    "name" : "Test message posted with node.js",
    "caption" : "Some tests with node.js",
    "link" : "http://www.youscada.com",
    "description" : "this is a description",
    "picture" : "http://youscada.com/wp-content/uploads/2012/05/logo2.png",
    "actions" : [ {
        "name" : "youSCADA",
        "link" : "http://www.youscada.com"
    } ]
});

// prepare the header
var postheaders = {
    'Content-Type' : 'application/json',
    'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
};

// the post options
var optionspost = {
    host : 'graph.facebook.com',
    port : 443,
    path : '/youscada/feed?access_token=your_api_key',
    method : 'POST',
    headers : postheaders
};

console.info('Options prepared:');
console.info(optionspost);
console.info('Do the POST call');

// do the POST call
var reqPost = https.request(optionspost, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);

    res.on('data', function(d) {
        console.info('POST result:\n');
        process.stdout.write(d);
        console.info('\n\nPOST completed');
    });
});

// write the json data
reqPost.write(jsonObject);
reqPost.end();
reqPost.on('error', function(e) {
    console.error(e);
});

/**
 * Get Message - GET
 */
// options for GET
var optionsgetmsg = {
    host : 'graph.facebook.com', // here only the domain name
    // (no http/https !)
    port : 443,
    path : '/youscada/feed?access_token=you_api_key', // the rest of the url with parameters if needed
    method : 'GET' // do GET
};

console.info('Options prepared:');
console.info(optionsgetmsg);
console.info('Do the GET call');

// do the GET request
var reqGet = https.request(optionsgetmsg, function(res) {
    console.log("statusCode: ", res.statusCode);
    // uncomment it for header details
//  console.log("headers: ", res.headers);


    res.on('data', function(d) {
        console.info('GET result after POST:\n');
        process.stdout.write(d);
        console.info('\n\nCall completed');
    });

});

reqGet.end();
reqGet.on('error', function(e) {
    console.error(e);
});


답변

내가 사용하는 노드 페치 (웹 개발자 경우)는 친숙한를 사용하기 때문에 () API를 가져 . fetch ()는 브라우저에서 임의의 HTTP 요청을하는 새로운 방법입니다.

예, 이것이 노드 js 질문이라는 것을 알고 있지만 개발자가 암기하고 이해해야하는 API 수를 줄이고 Javascript 코드의 재사용 성을 향상시키고 싶지 않습니까? Fetch는 표준 이므로 어떻게 수렴합니까?

fetch ()의 또 다른 좋은 점은 javascript Promise를 반환 하므로 다음과 같이 비동기 코드를 작성할 수 있다는 것입니다.

let fetch = require('node-fetch');

fetch('http://localhost', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: '{}'
}).then(response => {
  return response.json();
}).catch(err => {console.log(err);});

Fetch는 XMLHTTPRequest를 대체 합니다. 다음은 몇 가지의 더 많은 정보는 .


답변

웹 서비스 호출을 위해 restler 를 사용 하고 있으며 매력처럼 작동하며 매우 깔끔합니다.


답변

액시 오스

Node.js에서 Axios를 사용한 예제 (axios_example.js) :

const axios = require('axios');
const express = require('express');
const app = express();
const port = process.env.PORT || 5000;

app.get('/search', function(req, res) {
    let query = req.query.queryStr;
    let url = `https://your.service.org?query=${query}`;

    axios({
        method:'get',
        url,
        auth: {
            username: 'the_username',
            password: 'the_password'
        }
    })
    .then(function (response) {
        res.send(JSON.stringify(response.data));
    })
    .catch(function (error) {
        console.log(error);
    });
});

var server = app.listen(port);

프로젝트 디렉토리에서 다음을 수행하십시오.

npm init
npm install express
npm install axios
node axios_example.js

그런 다음 브라우저를 사용하여 Node.js REST API를 테스트 할 수 있습니다. http://localhost:5000/search?queryStr=xxxxxxxxx

마찬가지로 다음과 같은 게시물을 게시 할 수 있습니다.

axios({
  method: 'post',
  url: 'https://your.service.org/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

수퍼 에이전트

마찬가지로 SuperAgent를 사용할 수 있습니다.

superagent.get('https://your.service.org?query=xxxx')
.end((err, response) => {
    if (err) { return console.log(err); }
    res.send(JSON.stringify(response.body));
});

기본 인증을 수행하려는 경우 :

superagent.get('https://your.service.org?query=xxxx')
.auth('the_username', 'the_password')
.end((err, response) => {
    if (err) { return console.log(err); }
    res.send(JSON.stringify(response.body));
});

참조 :


답변

최신 Async / Await 기능을 사용하려면

https://www.npmjs.com/package/request-promise-native

npm install --save request
npm install --save request-promise-native

//암호

async function getData (){
    try{
          var rp = require ('request-promise-native');
          var options = {
          uri:'https://reqres.in/api/users/2',
          json:true
        };

        var response = await rp(options);
        return response;
    }catch(error){
        throw error;
    }
}

try{
    console.log(getData());
}catch(error){
    console.log(error);
}