2017-10-20 6 views
1

J'utilise express.js pour créer un serveur proxy pour gérer les appels d'un site Web, manipuler la demande, puis faire une demande pour un fournisseur tiers. J'ai besoin d'attendre la réponse de la tierce partie pour répondre à mon site Web, mais je ne trouve pas de moyen d'attendre la réponse.Attendre la réponse HTTP pour résoudre la fonction

Mon fichier contrôleur est

const model = require('../models/ticketmaster') 

const startHour = 'T00:00:00Z' 
const endHour = 'T23:59:59Z' 

function getData(req, res) { 
model({ startDateTime: req.query.startDateTime + startHour, endDateTime: req.query.endDateTime + endHour},res) 
res.status(200).send() 
} 

module.exports = getData; 

et le fichier modèle est

const request = require('request'); 
const config = require ('../config.js'); 

module.exports = (req, res) => { 

request.get(`${config.ticketmasterApiUrl}&startDateTime=${req.startDateTime}&endDateTime=${req.endDateTime}`) 
.on('finished', (res) => { 
     console.log(res.status) 
    }) 
    .pipe(res) 
} 
+0

Je suis confus. N'avez-vous pas juste besoin de supprimer la ligne 'res.status (200) .send()'? – skirtle

+0

En faisant cela, je reçois l'erreur 'rejet non géré StatusCodeError: 400' –

+0

Cela ressemble à un problème avec des promesses, mais je ne vois aucune promesse dans votre code et 'request' n'utilise pas de promesses. – skirtle

Répondre

0

Modifier ceci:

request.get(`${config.ticketmasterApiUrl}&startDateTime=${req.startDateTime}&endDateTime=${req.endDateTime}`) 
.on('finished', (res) => { 
     console.log(res.status) 
    }) 
    .pipe(res) 

Pour:

request.get(`${config.ticketmasterApiUrl}&startDateTime=${req.startDateTime}&endDateTime=${req.endDateTime}`) 
     .pipe(res) 

Il seulement des tuyaux après la demande revient par défaut, donc vous n'avez pas besoin on.('finished'