2017-08-18 4 views
0

J'ai deux applications MEAN (angulaires 4) et je souhaite que l'une d'entre elles obtienne des données de l'API de l'autre. La chose étrange est qu'avec une application, l'URL de base est la même pour le site et l'API. Celui-ci renvoie les données. L'autre application a une URL de base différente et l'application ne renvoie pas les données.API Express accessible sur localhost mais pas sur Google App Engine

APP1 (données avec succès retour)

base url: https://de***ta.appspot.com 
api url: https://de***ta.appspot.com/api/droplet/:id 

Alors, quand je sers cette application la goutte Je cherche est renvoyée au format JSON que vous attendez en utilisant ce code:

app.get('/api/droplets/:id', function(req, res) { 
    Droplets.findOne({ 
    _id: req.params.id 
     }, function(err, droplet) { 
     if (err) throw err; 
     res.send(droplet); 
     }); 
    }); 

APP2 (retourne index.html)

base url: https://differenturl.appspot.com 
api url: https://de***ta.appspot.com/api/droplet/:id 

Donc, ici, les urls de base sont différents et le pi url, lorsqu'il est appelé à partir du service http en angulaire, renvoie index.html. Je suppose que cela est dû à ce code dans le serveur:

app.use('*', function(req, res) { 
    return res.sendFile(path.join(__dirname, '/dist', 'index.html')); 
}); 

Mais ce que je ne comprends pas pourquoi un appel api renvoie l'index, tandis que l'autre activé la route comme indiqué.

Je voudrais savoir pourquoi cela se produit et comment accéder à l'API à partir d'une URL de base externe.

Mise à jour

Si je lance le serveur api localement sur localhost, il renvoie les données que je veux quand je tape simplement l'URL (http://localhost:8080/api/droplet/fhkssdkajfhds). Mais quand je le tape avec le site hébergé de google cloud, nous ne l'obtenons pas. Peut-être que c'est un problème avec la façon dont google cloud sert les applications express?

Répondre

0

... Je pense que c'est un CORS problem ..could it be? .can vous essayez juste pour tester pour ouvrir l'API à tous?

donc par exemple installer ceci: https://www.npmjs.com/package/cors puis

var cors = require('cors') 

var app = express() 
app.use(cors()) 
+0

Non, c'est pas. J'ai ce code et il envoie la demande de contrôle en amont, puis envoie la bonne demande correcte. Il renvoie le code d'état 200, il renvoie juste la page html plutôt que le json que je veux. – Finnjon