从客户端到服务器调用方法(Meteor)

时间:2015-08-19 07:33:04

标签: javascript meteor

客户端

Users = new Mongo.Collection("user-info");
if (Meteor.isClient) {
    var myApp = angular.module('calorie-counter', ['angular-meteor']);
    myApp.controller('formCtrl', ['$scope', function ($scope) {

        $scope.user = {
            item1: 0,
            item2: 0
        };

        $scope.submit = function () {
            Meteor.call("submit" ($scope.user));
        }
    }]);
}

服务器端:

if (Meteor.isServer) {
    Meteor.methods({
        submit: function (user) {
            Users.insert(user);
        }
    });
}

我尝试做的是当用户点击客户端的提交按钮时,我希望它调用服务器端方法,其中用户输入的信息将保存到集合中。我正在传递$scope.user作为参数(不太确定我是否正确调用方法)但是我一直收到的错误是“提交不是函数”。最初,我只是直接从该函数插入$scope.user,但我认为这种类型的操作可能更适合服务器端? (我不太确定我是在考虑这个问题还是只是过度思考)

2 个答案:

答案 0 :(得分:0)

您需要在方法名称后使用,来传递参数

Meteor.call("submit", $scope.user);
//           ^^^^^^^  ^^^^^^^^^^^
//           Method   Parameter

Documentation

示例

对于多个参数,请在参数之间使用逗号分隔符

// sync call
var result = Meteor.call('foo', 1, 2);

此外,所有数据库操作都应在服务器端完成以确保安全性。否则,最终用户( hackers )可以获得对数据库的访问权限,并可以攻击您的数据库。

确保在服务器上移动所有数据库处理代码并删除名为insecure的包。这是允许您从客户端访问DB的包。

答案 1 :(得分:0)

这不是一个有效的语法:

Meteor.call("submit"($scope.user));

您需要将其作为参数传递。请将其更改为:

Meteor.call("submit", $scope.user);