2016-07-30 80 views
1

我有第三方JSON端點不支持CORS,我已經形成我的應用程序應通過服務器代理請求。我今天已經研究了幾個小時,並沒有看到一個簡單的解決方案(幾個複雜的解決方案......)。如何使用流星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' 

/進口/ UI /網頁/應用程序/應用程序。 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> 

編輯:我不知道,如果它的事項代理是在server文件夾,但嘿它的工作,我有更多的事情建立。

+0

[這個解決方案](https://stackoverflow.com/a/45957165/1177832)使用'WebApp'模塊定義服務器路由要乾淨得多。 – danwild