MeteorJS在/ server文件夹下放什么?

时间:2014-03-19 05:11:57

标签: javascript meteor

我按照Discover Meteor书和书籍suggets将js文件放在/ collections文件夹下。 js文件定义了服务器端方法:

Meteor.methods({
  post: function(postAttributes) {
    var user = Meteor.user();
    var postWithSameLink = Posts.findOne({url: postAttributes.url});

    // ensure the user is logged in
    if (!user)
      throw new Meteor.Error(401, "You need to login to post new stories");

    // ensure the post has a title
    if (!postAttributes.title)
      throw new Meteor.Error(422, 'Please fill in a headline');

    // check that there are no previous posts with the same link
    if (postAttributes.url && postWithSameLink) {
      throw new Meteor.Error(302, 
        'This link has already been posted', 
        postWithSameLink._id);
    }

    // pick out the whitelisted keys
    var post = _.extend(_.pick(postAttributes, 'url', 'title', 'message'), {
      userId: user._id, 
      author: user.username, 
      submitted: new Date().getTime(),
      commentsCount: 0,
      upvoters: [],
      votes: 0
    });

    var postId = Posts.insert(post);
    return postId;
  },
});

那么,在这种情况下,自Meteor gathers all JavaScript files in your tree, with the exception of the server, public, and private subdirectories, for the client.以来,公众无法访问整个逻辑吗?

这是一个问题吗? 我应该把什么放到server文件夹?

1 个答案:

答案 0 :(得分:0)

该文件夹中可能包含许多仅限服务器的内容 - 订阅,允许规则,cron作业等。

server文件夹是您的代码对公众不可见的唯一地方。当然,这是您应该放置与安全相关的代码的地方:允许/拒绝规则,帐户配置等。如果您与外部API通信并希望将访问密钥放在代码中,/ server文件夹是唯一可接受的位置这样做。

将服务器端逻辑放在可访问的文件夹中并不是一个关键问题,因为无法从客户端更改服务器端代码。这里唯一的安全问题是,如果你在某个地方做了一个快捷方式,有人可能会研究你的代码并找到一个后膛。此外,您正在使用客户端不需要的代码阻塞连接。

我还说大多数方法都应该放在/ server中,但这取决于你需要什么。在客户端上访问方法代码允许利用延迟补偿(here,示例下面的第三段),但您需要确保自己客户端模拟不会产生会干扰的副作用与实际(服务器端)修改。

在您的情况下,您可以将此方法放在/ collections或/ model文件夹中,而不必担心这个问题。你也可以将它放在/ server中,事情也会起作用。