我按照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
文件夹?
答案 0 :(得分:0)
该文件夹中可能包含许多仅限服务器的内容 - 订阅,允许规则,cron作业等。
server
文件夹是您的代码对公众不可见的唯一地方。当然,这是您应该放置与安全相关的代码的地方:允许/拒绝规则,帐户配置等。如果您与外部API通信并希望将访问密钥放在代码中,/ server文件夹是唯一可接受的位置这样做。
将服务器端逻辑放在可访问的文件夹中并不是一个关键问题,因为无法从客户端更改服务器端代码。这里唯一的安全问题是,如果你在某个地方做了一个快捷方式,有人可能会研究你的代码并找到一个后膛。此外,您正在使用客户端不需要的代码阻塞连接。
我还说大多数方法都应该放在/ server中,但这取决于你需要什么。在客户端上访问方法代码允许利用延迟补偿(here,示例下面的第三段),但您需要确保自己客户端模拟不会产生会干扰的副作用与实际(服务器端)修改。
在您的情况下,您可以将此方法放在/ collections或/ model文件夹中,而不必担心这个问题。你也可以将它放在/ server中,事情也会起作用。