2017-02-10 12 views
0

Ich möchte einen HTTPS-POST von einem nodeJS-Server an einen anderen senden. Ich habe einige JSON-Daten, die ich mit dieser Anfrage senden möchte (gefüllt mit einem HTML-Formular).nodeJS - HTTPS-Anfrage stellen, JSON-Daten senden

Wie kann ich das tun? Ich kenne https.request(), aber es scheint keine Option zu geben, JSON als Teil der Abfrage einzubeziehen. Aus meinen Recherchen scheint das mit einer HTTP-Anfrage, nicht aber einer HTTPS-Anfrage möglich. Wie kann ich das lösen?

const pug = require('pug'); 
var cloudinary = require('cloudinary'); 
var express = require('express'); 
var multer = require('multer'); 
var upload = multer({ dest: 'uploads/' }); 
var request = require('request'); 
var bodyParser = require('body-parser'); 

var options = { 
hostname: 'ec2-54-202-139-197.us-west-2.compute.amazonaws.com', 
port: 443, 
path: '/', 
method: 'GET' 
}; 

var app = express(); 
var parser = bodyParser.raw(); 
app.use(parser); 

app.set('view engine', 'pug'); 

app.get('/', upload.single('avatar'), function(req, res) { 
return res.render('index.pug'); 
}); 

app.get('/makeRequest*', function(req, res) { 
query = req['query']; 
/* 
Here, I would like to send the contents of the query variable as JSON to the server specified in options. 
*/ 
}); 

Antwort

2

Sie können JSON-Daten über eine POST HTTP-Anforderung mit dem nativen https Knotenmodul, wie stated in the documentation

Alle Optionen aus http.request() gelten senden.

Also, die http.request() am Beispiel können Sie wie folgt vorgehen:

var postData = querystring.stringify({ 
    'msg' : 'Hello World!' 
}); 

var options = { 
    hostname: 'www.google.com', 
    port: 80, 
    path: '/upload', 
    method: 'POST', 
    headers: { 
    'Content-Type': 'application/x-www-form-urlencoded', 
    'Content-Length': Buffer.byteLength(postData) 
} 
}; 

var req = https.request(options, (res) => { 
    console.log(`STATUS: ${res.statusCode}`); 
    console.log(`HEADERS: ${JSON.stringify(res.headers)}`); 
    res.setEncoding('utf8'); 
    res.on('data', (chunk) => { 
    console.log(`BODY: ${chunk}`); 
    }); 
    res.on('end',() => { 
    console.log('No more data in response.'); 
    }); 
}); 

req.on('error', (e) => { 
    console.log(`problem with request: ${e.message}`); 
}); 

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

Sie postData zu Ihrem gewünschten JSON-Objekt ändern, bei

+0

Dies funktioniert nicht, der Server erhält die postData nicht. –

+0

Ich habe es versucht und es funktioniert tatsächlich, bedenken Sie, dass in dem Server, wo Sie die Anfrage behandeln werden die Daten in 'req.body' enthalten sein werden, wenn es ein Knotenserver ist –

0

ich die unten glauben, was Sie wollen . Verwenden der request Bibliothek. Siehe Kommentare im Code für meine Empfehlungen.

... 

var options = { 
    hostname: 'ec2-54-202-139-197.us-west-2.compute.amazonaws.com', 
    port: 443, 
    path: '/', 
    method: 'POST', 
    json: true 
}; 

... 

//making a post request and sending up your query is better then putting it in the query string 
app.post('/makeRequest', function(req, res) { 
    var query = req.body['query']; 

    //NOTE, you cannot use a GET request to send JSON. You'll need to use a POST request. 
    //(you may need to make changes on your other servers) 
    options.body = { payload: query }; 
    request(options, function(err, response, body) { 
    if (err) { 
     //Handle error 
     return; 
    } 

    if (response.statusCode == 200) { 
     console.log('contents received'); 
    } 

    }); 
}); 
Verwandte Themen