Javascript 在/server文件夹下放置什么?

Javascript 在/server文件夹下放置什么?,javascript,meteor,Javascript,Meteor,我正在关注《发现流星》一书和《将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 i

我正在关注《发现流星》一书和《将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收集了您树中的所有JavaScript文件,除了客户端的服务器、公共和私有子目录。

这是一个问题吗?
我应该在
服务器
文件夹中放置什么?

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

服务器
文件夹是普通公众看不到您的代码的唯一地方。当然,它是您应该放置安全相关代码的地方:允许/拒绝规则、帐户配置等。如果您与外部API交谈并希望将访问密钥放置在代码中,/server文件夹是唯一可以接受的位置

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

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


在您的情况下,您可以将此方法放在/collections或/model文件夹中,而不必担心这一点。您也可以将它放在/server中,一切都会正常工作。

server/
文件夹中的任何代码都不能使用延迟补偿。在客户端上定义的方法将作为方法存根运行,这些方法存根是客户端模拟,可以极大地提高应用程序的外观速度,然后在服务器最终响应时被覆盖。类似地,可以在客户端和服务器上定义允许/拒绝规则,以启用延迟补偿。因此,为了获得最佳性能,应该进入
server/
的唯一代码应该是不能或不应该(例如出于安全考虑)接受延迟补偿的代码。