【问题标题】:Calling a method from client to server (Meteor)从客户端调用方法到服务器(Meteor)
【发布时间】:2015-08-19 07:33:03
【问题描述】:

客户端

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,但我认为这种操作类型可能更适合服务器端? (我不太确定我是在考虑这个问题还是只是想多了)

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

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

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

    Documentation

    示例

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

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

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

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

    【讨论】:

    • 啊!我应该一次回答一个问题。哈哈。我开始写答案并没有发布! :(
    • 哎呀,我觉得我的语法看起来很粗略。谢谢!在确定一个方法是否应该在客户端块与服务器块上时,我有点困惑。您认为这种类型的向数据库添加内容的功能是在服务器端还是客户端?因为我可以很容易地在客户端做同样的事情,所以我只是认为这是一个更适合服务器端的操作。
    • @halapgos1 所有的数据库操作都应该在服务器端完成。否则,客户端可以访问数据库,这是安全风险。另外,删除名为insecure 的包。这是允许您从客户端访问数据库的软件包
    • @Tushar 哦,开枪,我的错。别担心,我明白了!
    【解决方案2】:

    这不是一个有效的语法:

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

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

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

    【讨论】:

    • 哎呀,我觉得我的语法看起来很粗略。谢谢!在确定一个方法是否应该在客户端块与服务器块上时,我有点困惑。您认为这种类型的向数据库添加内容的功能是在服务器端还是客户端?因为我可以很容易地在客户端做同样的事情,所以我只是认为这是一个更适合服务器端的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多