Meteor: вызвать template.event для вызова внешнего сервера с реагированием в шаблоне blaze - PullRequest
1 голос
/ 03 апреля 2020

Мне нужно добавить компонент реагирования в приложение Meteor (реагировать в блэйз-компоненте) ( Meteor Guide ), чтобы упростить задачу, компонент представляет собой кнопку, которая должна вызывать события для отправки ввода. на другой сервер. Если я пытаюсь сделать http-вызов от клиента, но я получаю ошибку перекрестного источника. Поэтому мне нужно сделать вызов API с метеорного сервера.

Поток запроса должен быть таким:

Нажатие кнопки -> запуск события шаблона -> Meteor.call ( 'HTTPRequest', POST, url, data) -> сохранить ответ в Meteor Mon go db и отправить в хранилище реагирующего притока

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

Сторона клиента: следующий файл является внешним.

React App:

import React from 'react';

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

export default App;

Проверка файла метеора. html:

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

Метеоритет. 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);
    },
});

На стороне сервера:

бегун. 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);
            }
        });
    }
});

Есть ли способ вызова метода на стороне сервера ( бегун. js) непосредственно из части реакции?

Если нет, как я могу инициировать событие для вызова метода сервера из реакции?

Как передать данные из компонента реакции в Api позвонить и сохранить его обратно?

Спасибо!

1 Ответ

1 голос
/ 05 апреля 2020

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

Вам нужно поместить обработчик внутри компонента React. Очень просто на самом деле, что-то вроде этого:

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

Этот код не завершен, вам нужно предоставить URL-адрес и данные, и попробуйте / поймать его и т. Д. c, но он демонстрирует, как это сделать Это.

...