【问题标题】:how to call a method of server folder from client folder in meteor js如何从流星js中的客户端文件夹调用服务器文件夹的方法
【发布时间】:2017-08-20 16:33:39
【问题描述】:

我是 MeteorJs 的新手,我想调用一个只能在服务器上运行的查询。所以我在服务器端代码中编写方法,但它会抛出这样的错误:

调用方法“getCenters”时出错:内部服务器错误 [500]

我想从服务器端收集数据,因为 $nearSphere 不能在客户端工作。下面,我添加了我到目前为止所做的代码。我在不同的目录中有两个文件。

客户端代码,在projectName/client/templates/pages/search.js:

Template.searchlist.onRendered(function(){
    this.searchedString = Router.current().params.name;
    Meteor.call('getCenters',this.searchedString);
});

服务器端代码,在myproject/server/main.js:

import { Meteor } from 'meteor/meteor';

Meteor.startup(() => {
    Meteor.methods({
        'getCenters': function(searchedParams) {
            searchedParams = searchedParams.split('-');
            var lat = searchedParams.pop();
            var lng = searchedParams.pop(1);
            console.log(Centers.find({
                coordinates: {
                    $nearSphere: {
                        $geometry: {
                            type: "Point",
                            coordinates: [lng, lat]
                        },
                        $maxDistance: 10000
                    }
                }
            }));
        }
    });
});

【问题讨论】:

  • 这个问题似乎是这个问题的结果:stackoverflow.com/questions/45751007/…。您最好将其答案标记为已接受。
  • 这也是我的问题,但没有解决这个问题。因为我想使用客户端路由器方法
  • 您必须在此处显示错误日志。只需进入您的 shell 或服务器,然后在此处添加错误跟踪

标签: meteor


【解决方案1】:

看来你在 main.js 的 Meteor.startup 中定义了你的方法。

你不应该那样做。在服务器文件夹中创建一个单独的文件来放置你的方法。你的 main.js 应该是空的,除了import { Meteor } from 'meteor/meteor';

还有一点:Meteor.methods console.log 将显示在服务器控制台中。所以你不会在浏览器控制台中看到结果。

您的客户端调用中没有任何回调,因此客户端中不会有任何结果...

【讨论】:

  • 好的,谢谢@GregBzFullstack 从你那里得到一些想法!如果我创建一个像这样prjectName/server/newJs.js 的文件,我是否需要在某处包含这个文件。我只是有点困惑
  • 不,它会被 Meteor 自动收录。这是一个非常聪明的框架!!!您可以从客户端的任何地方访问您的方法。也许你应该把 console.log 放在你的方法中来测试访问。并在服务器控制台中查看结果!
  • 嗨@GregBzFullstack 我刚刚添加,但显示像这样的错误消息Error invoking Method 'getResponseFromServer': Method 'getResponseFromServer' not found [404]
  • 有时,我需要关闭服务器并重新启动它以在服务器端应用更改。也许你应该尝试,因为我不明白......
  • 让我分享一下我做了什么getResponseFromServer = function(){ return 5+3; },然后像这样console.log(Meteor.call('getResponseFromServer'));从我的铁路由器调用这个方法,它显示错误
【解决方案2】:
  1. 您似乎将string 发送到meteor 方法,但将其视为array(使用.pop()

  2. 你在哪里导入/创建集合Centers

  3. Collection.find() 返回光标。要获取文档,您需要在此光标上使用 .fetch()

【讨论】:

  • 我承认你的全部观点@Styx 实际上我正在使用 var searchedParams = searchedParams.split('-'); beofre split 我很抱歉,主要是我无法调用这个函数
  • 您的错误在于 invoking 此方法,而不是无法调用它。这就是为什么你应该展示你的实际代码,否则很难帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多