Meteor:触发 template.event 调用外部服务器,在 blaze 模板中做出反应

Meteor: trigger template.event to call an external server with react in blaze template

我必须向 Meteor 应用程序添加一个反应组件(在 blaze 组件中反应)(Meteor Guide),为了简单起见,组件是一个按钮,应该触发事件以将输入发送到不同的服务器。如果我尝试从客户端进行 http 调用,但出现跨源错误。因此,我需要从流星服务器进行 API 调用。

请求的流程应该是这样的:

Button clicked -> trigger template events -> Meteor.call('HTTPRequest', POST, url, data) -> save response in Meteor Mongo db and send to the react redux store

我遇到的问题是我没有找到从反应应用程序触发事件的方法。

客户端: 以下文件是前端文件。

React 应用程序:

import React from 'react';

const App = () => {
    return <button onClick={...trigger the event...}> Run </button>
};

export default App;

流星文件test.html:

<template name="test">
        <div>{{> React component=App onClick=onClick}}</div>
</template>

流星test.js

import App from './App.js';

Template.test.helpers({
    App() {
        return App;
    },
});

Template.test.events({
    'click send-code': (url, data) => {
       Meteor.call('HTTPRequest', 'POST', url, data);
    },
});

服务器端:

runner.js

import { HTTP } from 'meteor/http';

Meteor.methods({
    'HTTPRequest'(method, url, data) {
        return new Promise((resolve, reject) => {
            try {
                HTTP.call(method, url, data || {}, (error, result) => {
                    if (error) {
                        reject(error);
                        return;
                    }
                    resolve(result);
                });

            } catch (e) {
                reject(e);
            }
        });
    }
});

有没有办法直接从反应部分调用服务器端方法(runner.js)?

如果没有,如何触发事件以从 React 调用服务器方法?

如何将数据从 React 组件传递到 Api 调用并将其保存回来?

谢谢!

看起来您希望您的 blaze 助手与 React 组件一起工作,但事实并非如此。

您需要将处理程序放在 React 组件中。真的很简单,像这样:

const App = () => {
    const clickHandler = () => {
         const data = {...}
         Meteor.call('HTTPRequest', 'POST', 'https://...', data);
    }
    return <button onClick={clickHandler}> Run </button>
};

此代码不完整,您需要提供 url 和数据,并对其进行 try/catch 等操作,但它演示了如何操作。