今天我尝试处理流星并遇到问题,无法从服务器页面获取数据。
我尝试在Google和流星上搜索它,但是有两种获取数据publish / subscribe
和Method
的方法
有下面的代码,我不知道如何在流星服务器端写它,并在客户端获取数据
function (x)
{
var y =2
var z = y*x
return z;
}
现在我想在客户端调用此方法
答案 0 :(得分:0)
通过发布/订阅,您可以跟踪收集到的数据。 https://docs.meteor.com/api/pubsub.html
根据文档:
方法是Meteor客户端可以调用的远程函数 流星。
因此,要回答最后一个问题:要从客户端调用函数,必须使用“ Meteor.call('yourMethodName',optionalCallBacks);”
编辑:
确定,如注释中所建议,此处为示例,并带有您的功能。 在服务器端,让我们在名为“ methods.js”或诸如此类的文件中说:
import { Meteor } from 'meteor/meteor';
Meteor.methods({
myMethod(x) {
const y = 2;
const z = y * x;
return z;
}
});
然后在客户端,您可以调用此方法,例如:
Meteor.call('myMethod', x, (error, result) => {
// OPTIONAL CALLBACK RESULT
console.log(error, result);
});
这里的参数分别是方法的名称,名为x的变量,回调。
答案 1 :(得分:0)
publish / subscribe和method有什么区别?在何处/何时使用方法并发布/订阅?
因此,如果您需要逻辑,则不需要pub / sub。 方法用于逻辑pub / sub进行数据处理。
重要提示: 如果需要在方法上使用流星集合中的数据,则需要考虑到此方法,如果方法是在服务器端执行的,则它可以访问所有数据(集合)。 如果该方法在客户端执行,则只能访问已发布的数据。
另一方面,根据您的示例,您不需要任何数据,因此我将其跳过。
我强烈建议您使用经过验证的方法:
https://github.com/meteor/validated-method
现在让我们来看例子
想象您有一个方法
export const calculate = new ValidatedMethod({
name: 'logic.calculate', // methods are usually named like this
validate: new SimpleSchema({ // use SimpleSchema to autovalidate parameters
x: {
type: Number
}
}).validator(),
run({ x }) {
const y = 2;
return y*x;
}
});
注意事项: 1.该文件应在服务器上的某处导入。 2.您需要使用验证
现在在客户端调用它
Meteor.call('logic.calculate', { x }, (error, result) => {
if (error) {
do something
}
console.log(result);
});
此外,您可以直接导入方法并按如下方式调用它:
import { calculate } from '../../api/logic/methods';// use real method path here
calculate.call({ x }, (error, result) => {
if (error) {
do something
}
console.log(result);
});
请注意,对于经过验证的方法,参数是一个对象
答案 2 :(得分:0)
在流星中,我们可以创建一个流星方法,并可以通过Meteor.call('methodName', 'param')
将数据传递到客户端。但是在异步操作的情况下,我们需要使用future。看下面的例子:
Future = Npm.require('fibers/future');
Meteor.methods({
foo: function() {
const future = new Future();
someAsyncCall(foo, function bar(error, result) {
if (error) future.throw(error);
future.return(result);
});
// Execution is paused until callback arrives
const ret = future.wait(); // Wait on future not Future
return ret;
}
});