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 等操作,但它演示了如何操作。
我必须向 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 等操作,但它演示了如何操作。