2016-07-30 3 views
1

У меня есть сторонняя конечная точка JSON, которая не поддерживает CORS, я был сформирован, мое приложение должно проксировать запрос через сервер. Я исследовал это в течение нескольких часов сегодня, и я не вижу простого решения (пара сложных ...).Как использовать сервер узла Meteor JS для прокси-сервера стороннего запроса ajax

Так что в основном мне нужно сделать что-то вроде request('http://localhost:3000/publications/jsonProxy'), которое вызывает сервер Meteor. Тогда мне нужна публикация, которая запрашивает данные у третьей стороны с помощью защищенного токена, и мне нужно вернуть эти данные в браузер.

Я пытался что-то вроде:

const request = require('request'); 

if (Meteor.isServer) { 
    Meteor.publish('jsonProxy', function jsonProxyPublication() { 
    var options = { 
     url: 'https://somewhere.com/api/endpoint', 
     headers: { 
     'API-Key': '123' 
     } 
    }; 

    function callback(error, response, body) { 
     if (!error && response.statusCode == 200) { 
     let info = JSON.parse(body); 
     console.log(info); 
     return info 
     } else { 
     console.error(error, response) 
     } 
    } 

    request(options, callback); 

    return this.ready() 
    }); 
} 

Тогда: curl localhost:3000/publications/jsonProxy. Это может быть не так близко к правильному способу сделать это, я как бы потерян.

Кажется достаточно простым, может ли кто-нибудь указать мне правильный способ вернуть эти данные в браузер?

+0

Обновление - я понял это и опубликую в ближайшее время – BradGreens

ответ

1

Похоже, я получил его работу. Пример кода ниже, а не «реальный» код, поскольку я должен был извлечь его из контекста.

/server/proxy/json-api.js

import { Meteor } from 'meteor/meteor'; 
import { HTTP } from 'meteor/http' 

Meteor.methods({ 
    'jsonProxy'() { 
    const apiUrl = 'https://api.com/api' 

    const response = HTTP.get(apiUrl, { 
     headers: { 
     'API-Key': '123' 
     } 
    }).data 

    console.log(`${ apiUrl } response:`, response) 

    return response 
    } 
}) 

/server/main.js

import './proxy/jsonodds.js' 

/импорт/щ/страницы/приложение/приложения. js

Meteor.call('jsonProxy', (error, result) => { 
    if(!error) { 
    Session.set('jsonData', result) 

    } else { 
    Session.set('jsonData', `Error: ${ JSON.stringify(error) } `) 
    } 
} ) 

Template.app.helpers({ 
    jsonData() { 
    return Session.get('jsonData') 
    } 
}) 

/imports/ui/pages/app/app.html

<template name="app"> 
    <div id="app"> 
    {{#each jsonData}} 
     {{> itemTemplate}} 
    {{/each}} 
    </div> 
</template> 

<template name="itemTemplate"> 
    <p>{{displayName}}</p> 
</template> 

Edit: Я не уверен, если это имеет значение прокси находится в папке server, но эй, это работает, и у меня есть еще вещи строить.

+0

[Это решение] (https://stackoverflow.com/a/45957165/1177832) с использованием модуля 'WebApp' для определения маршрутов сервера намного чище. – danwild