如何从由nodejs使用的api向前端返回数据?

时间:2018-09-04 19:07:03

标签: javascript node.js

我要使用的API来自第三方,它阻止了跨域访问,因此我无法使用jquery和javascript来使用它...因此,我不得不在nodejs中创建一个脚本来使用此API。 ..

我想知道如何使用JavaScript使用nodejs从API到前端的数据?

请记住,此nodejs与我的前端在一个单独的文件中,并且在另一台服务器上运行。

var request = require("../../node_modules/request");
var options = { method: 'GET',
  url: 'https://....apimanagement.us2.hana.ondemand.com/bot/v1/...',
  qs: { Shop: '..'', PeriodoAte: '...' },
  headers: 
   { 'postman-token': '822e513f-da5e-4a0b-b403-1dd8fa46e86f',
     'cache-control': 'no-cache',
     authorization: 'Basic .........',
     apikey: '....',
     'content-type': 'application/json' },
  json: true };

request(options, function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', body); // Print the HTML for the Google homepage.
});

2 个答案:

答案 0 :(得分:0)

您需要一个Web服务器来侦听请求,以便与您的后端(Node.js)进行通信。如果您想简单一些,可以使用Express。您还可以使用JavaScript框架,其中有很多(Sails.js是快速入门的不错选择)。

如果您无法在服务器中安装Node.js,另一种选择是使用AWS Lambda快速创建可通过HTTP请求从前端使用的API。

答案 1 :(得分:0)

一个路径是:

  • 选择一个节点框架(Express,Hapi等),让我们为该示例选择Hapi
  • 阅读入门指南https://hapijs.com/tutorials/getting-started
  • 了解承诺或经历回调地狱
  • 最终得到了这样的测试

    'use strict';
    
    const Hapi = require('hapi');
    const rp = require('request-promise');
    
    const server = Hapi.server({
      port: 3000,
      host: 'localhost'
    });
    
    
    server.route({
      method: 'GET',
      path: '/',
      handler: (request, h) => {
    
        const options = {
          method: 'GET',
          uri: 'https://./..',
          qs: {Shop: '..', PeriodoAte: '...'},
          headers: {
            'postman-token': '822e513f-da5e-4a0b-b403-1dd8fa46e86f',
            'cache-control': 'no-cache',
            authorization: 'Basic .........',
            apikey: '...',
            'content-type': 'application/json'
          },
          json: true
        };
    
    
        return rp(options).catch(e => {
          console.log(`api call failed ${e}`);
          return 'fail';
        })
      }
    });
    
    const init = async () => {
    
      await server.start();
      console.log(`Server running at: ${server.info.uri}`);
    };
    
    process.on('unhandledRejection', (err) => {
    
      console.log(err);
      process.exit(1);
    });
    
    init();
    
  • 现在您可以从节点启动它并访问'localhost:3000 /'

  • 了解更多,尝试更多
  • 了解节点生产模式和托管

类似的东西,希望对您有所帮助

编辑://

要在客户端上消费,只需使用例如jquery来获取上面的代码提供的路由

以下是注释中要求的一些客户示例:

如果要从其他位置(而不是hapi api)提供html,则需要在HapiJS路由中启用cors。

     server.route({
        method: 'GET',
        path: '/',
        config: {
            cors: {
                origin: ['*'],
                additionalHeaders: ['cache-control', 'x-requested-with']
            }
        },

然后使用该端点的一种方法是jquery

   <!doctype html>
    <html>
    <head>
        <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    </head>
    <body>
    <input type="button" id="Button" value="Fetch"/>
    <div id='main'></div>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#Button').click(() => {
                $.ajax({
                    url: "http://localhost:3000/info", success: (result) => {
                        $("#main").text(result);
                    }
                });
            });
        });
    </script>
    </body>
    </html>