我是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
}
}
}));
}
});
});
答案 0 :(得分:1)
您似乎在main.js的Meteor.startup中定义了方法。
你不应该这样做。在服务器文件夹中创建一个单独的文件以放入您的方法。除了import { Meteor } from 'meteor/meteor';
另一点:Meteor.methods console.log
将显示在服务器控制台中。所以你不会在浏览器控制台中看到结果。
您的客户端电话中没有任何回调,因此客户端无法获得结果......
答案 1 :(得分:0)
您似乎正在向流星方法发送string
,但将其视为array
(使用.pop()
)
您在哪里导入/创建集合Centers
?
Collection.find()
返回光标。要获取文档,您需要在此光标上使用.fetch()
。