如何在meteor js中调用客户端文件夹中的服务器文件夹方法

时间:2017-08-18 11:46:25

标签: meteor

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

2 个答案:

答案 0 :(得分:1)

您似乎在main.js的Meteor.startup中定义了方法。

你不应该这样做。在服务器文件夹中创建一个单独的文件以放入您的方法。除了import { Meteor } from 'meteor/meteor';

之外,您的main.js应为空

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

您的客户端电话中没有任何回调,因此客户端无法获得结果......

答案 1 :(得分:0)

  1. 您似乎正在向流星方法发送string,但将其视为array(使用.pop()

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

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