2017-05-31 54 views
7

Realizuję api api z aplikacji nodejs.Nodejs - Odpoczynek api z opcją - dane z pliku

Moi curl połączenia wygląda następująco:

curl -X PUT -iv -H "Authorization: bearer <token>" -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Spark-Service-Instance: <spark-instance>" --data "@pipeline.json" -k https://<url> 

Chcę mieć podobną rozmowę w Nodejs. Jestem w stanie zrozumieć, jak mają dane wysłane który znajduje się w pliku json który w curl połączenie zostało --data "@pipeline.json".

kod

My Nodejs wygląda następująco:

var token = req.body.mlToken; 
var urlToHit = req.body.url; 
var SPARKINSTANCE = req.body.sparkInstance; 
var b = "bearer "; 
var auth = b.concat(token); 


var headers = { 
    'Content-Type': 'application/json', 
    'Authorization': auth, 
    'Accept': 'application/json', 
    'X-Spark-Service-Instance': SPARKINSTANCE 
} 

var options= { 
    url: urlToHit, 
    method: 'PUT', 
    headers: headers 
} 

console.log(urlToHit); 
request(options, callback); 
function callback(error, response, body) {...} 

Odpowiedz

3

Można użyć biblioteki request do rura wniosek jak tak:

var fs = require('fs');  
var options= { 
    url: urlToHit, 
    method: 'PUT', 
    headers: headers 
} 

fs.createReadStream('./pipeline.json') 
    .pipe(request.put(options, callback)) 

Albo, stosując zwykły node.js przeczytać plik w pamięci asynchronicznie a po załadowaniu złożyć zamówienie put tak:

var fs = require('fs'); 
// Will need this for determining 'Content-Length' later 
var Buffer = require('buffer').Buffer 

var headers = { 
    'Content-Type': 'application/json', 
    'Authorization': auth, 
    'Accept': 'application/json', 
    'X-Spark-Service-Instance': SPARKINSTANCE 
} 

var options= { 
    host: urlToHit, 
    method: 'PUT', 
    headers: headers 
} 

// After readFile has read the whole file into memory, send request 
fs.readFile('./pipeline.json', (err, data) => { 
    if (err) throw err; 
    sendRequest(options, data, callback); 
}); 

function sendRequest (options, postData, callback) { 
    var req = http.request(options, callback); 

    // Set content length (RFC 2616 4.3) 
    options.headers['Content-Length'] = Buffer.byteLength(postData) 

    // Or other way to handle error 
    req.on('error', (e) => { 
    console.log(`problem with request: ${e.message}`); 
    }); 

    // write data to request body 
    req.write(postData); 
    req.end(); 
} 
+0

Będzie to również wymagać czegoś takiego: const = fs zależnymi („FS”); – Tarun

+1

Zaktualizowałem moją odpowiedź – Tom

+0

Czy możesz również zmienić ścieżkę pliku jako bez "." Może kogoś zmylić! fs.createReadStream ('/ pipeline.json'). Dzięki za pomoc – Tarun