J'essaie d'appeler une API REST à partir d'un noeud à l'aide de node-rest-client. Dans le cas où mon appel renvoie une erreur, je veux attraper l'erreur et le signaler à l'appelant.node-rest-client: Impossible de définir les en-têtes après leur envoi.
J'essaie cela avec Postman, malheureusement cela ne fonctionne qu'une seule fois. Lorsque j'appuie sur envoyer la deuxième fois, mon programme node.js se bloque avec l'erreur "Impossible de définir les en-têtes après leur envoi".
Je suis nouveau sur node.js, donc toute aide est très appréciée!
//app stuff
const client_id = "x";
const client_secret = "y";
const callback = "https://myurl;
// Basic Setup
var http = require('http'),
express = require('express'),
mysql = require('mysql'),
parser = require('body-parser'),
Client = require('node-rest-client').Client;
var client = new Client();
// Setup express
var app = express();
app.use(parser.json());
app.use(parser.urlencoded({ extended: true }));
app.set('port', process.env.PORT || 5000);
// Set default route
app.get('/', function (req, res) {
res.send('<html><body><p>Welcome to Bank API Wrapper</p></body></html>');
});
app.post('/authorize', function (req,res) {
var response = [];
if (typeof req.body.code !== 'undefined' && typeof req.body.state !== 'undefined'){
var code = req.body.code, state = req.body.state;
//conversion to base64 because citi api wants it this way
var authorization = "Basic " + Buffer.from(client_id + ":" + client_secret).toString('base64');
var args = {
data:{"grant_type":"authorization_code","code":code,"redirect_uri":callback},
headers:{"Authorization":authorization,"Content-Type":"application/x-www-form-urlencoded"}
};
//get access and refresh token
client.post("https://sandbox.apihub.citi.com/gcb/api/authCode/oauth2/token/sg/gcb", args, function (citidata, citiresponse) {
//console.log(citidata);
//console.log(citiresponse);
});
client.on('error', function (err) {
response.push({'result' : 'error', 'msg' : 'unauthorized access'});
res.setHeader('Content-Type', 'application/json');
res.status(200).send(JSON.stringify(response));
});
}
else {
response.push({'result' : 'error', 'msg' : 'Please fill required details'});
res.setHeader('Content-Type', 'application/json');
res.status(200).send(JSON.stringify(response));
}
});
// Create server
http.createServer(app).listen(app.get('port'), function(){
console.log('Server listening on port ' + app.get('port'));
});
Le programme n'a pas de problème avec la partie « S'il vous plaît remplir les détails requis ». Le problème est avec la section qui dit client.on ('erreur'. Cela ne fonctionne qu'une seule fois.) Après cela, j'obtiens l'erreur "Impossible de définir les en-têtes après leur envoi." –