首页 > 解决方案 > 发布/订阅和方法有什么区别?我们在哪里/何时使用方法和发布/订阅?

问题描述

今天我尝试在流星上工作并遇到从服务器页面获取数据的问题..

我尝试在谷歌和流星方面搜索它,但有两种方法可以获取数据publish / subscribeMethod

有以下代码,我不知道如何在流星服务器端编写它并在客户端获取该数据

function (x)
{
var y =2
var z  = y*x
return z;
}

现在我想在客户端调用这个方法

标签: meteor

解决方案


发布/订阅和方法有什么区别?我们在哪里/何时使用方法和发布/订阅?

因此,如果您想要一个不需要发布/订阅的逻辑。方法用于逻辑发布/订阅以进行数据处理。

重要提示: 如果您需要在方法上使用来自流星集合的数据,则如果方法在服务器端执行,则需要考虑这一点,它可以访问所有数据(集合)。如果该方法在客户端执行,则它只能访问已发布的数据。

另一方面,根据您的示例,您不需要任何数据,因此我将跳过它。

我强烈建议使用经过验证的方法:

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);
});

请注意,对于已验证的方法,参数是一个对象


推荐阅读