我正在将流星应用程序迁移到流星1.3的导入功能。
但是我认为这并不是应该做的最好方法。是否只能加载/导入真正需要的方法?我的意思是,现在只有所有方法都通过导入methods.js来加载。但是我想以模块化的方式做到这一点。因此,如果.fomNewElement
在应用程序中使用了表单,insertArticle
则将导入方法,依此类推。不只是加载所有内容...
在下面,您可以看到我的文件夹结构/imports
以及一些文件内容。我还有什么可以改善的结构本身吗?
如果导入将取决于用户角色,那也将非常好。这可能吗?
进口/api/article/client/article.js
import { Articles } from '../';
import { insertArticle, updateArticle } from '../methods.js';
Template.Articles.helpers({
// some helpers
});
Template.Artilces.onCreated(function() {
// some code
});
Template.Artilces.onRendered(function() {
// some code
});
Template.Articles.events({
'submit .formNewElement': function(event) {
event.preventDefault();
var title = event.target.title.value.trim();
insertArticle.call({
title: title
});
},
'click .anything': function() {}
});
如您所见,我将所有帮助程序,事件和onCreated / onRendered代码放入了js文件。希望这是“正确的” ...如果不是很聪明,请给我一些提示。
进口/api/article/index.js
export const Articles = new Mongo.Collection('articles');
进口/api/article/methods.js
import { Articles } from './';
export const insertArticle = new ValidatedMethod({
name: 'article.insert',
validate: new SimpleSchema({
title: { type: String }
}).validator(),
run( document ) {
Articles.insert( document );
}
});
export const updateArticle = new ValidatedMethod({
name: 'article.update',
validate: new SimpleSchema({
_id: { type: String },
'update.title': { type: String }
}).validator(),
run( { _id, update } ) {
Articles.update( _id, { $set: update } );
}
});
和其他文件:
导入/启动/客户端/ index.js
import '../../api/redactor-article/client';
导入/启动/服务器/ index.js
import '../../api/redactor-article/server/publications.js';
import '../../api/redactor-article/methods.js';
导入/api/article/client/index.js
import './article.html';
import './article.sass';
import './article.js';
文件结构
/imports
/api
/article
/client
article.html
article.js
article.sass
index.js
/server
publications.js
index.js
methods.js
更新
也许这是构造这样的导入模块的更好方法:
imports/
api/
articles/
publication.js
methods.js
collection.js
ui/
articles/
article.html
article.css
article.js // contains helpers, events and onCreated/onRendered
然后我必须在startup/client
(->此模块的所有ui文件和所有api文件)和startup/server
(->仅所有api文件)中导入文件...
正确的?
几点:
imports/api
。该目录是为集合,方法,助手,“业务逻辑”和公共API设计的(例如,如果公开REST API,则可以在该目录中进行操作)。使用imports/ui
你的模板(包括他们的风格和相关.js
文件)。client
和server
目录之间进行区分。只需从相应的主要入口点(即client/main.js
和server/main.js
)导入所需的文件。这一点比我在这里建议的要复杂一些,请参阅下面的“流星指南”中的“结构”链接。index.js
放置Articles
收藏集似乎并不合逻辑。我/imports/api/articles/articles.js
为此准备一个文件。请参阅http://guide.meteor.com/structure.html,以获取有关放置物品的位置以及原因的良好概述。Articles
集合使用默认导出:http : //guide.meteor.com/code-style.html#collections要回答有关导出多少文件(即哪些功能)的问题,对于要加载的所有内容,您无能为力。捆绑程序无论如何都需要读取整个JS文件(假设您导出了一个对象,然后在同一文件中对其进行了进一步的更改-这不是最佳实践,但可能)。但是,如果您不使用任何函数,请不要导入它!而且,如果无法管理,您总是可以将方法拆分为单独的文件。
关于只为某些用户角色导入位的问题:始终避免使用import
s或其他类型的混淆来确保安全。在Meteor上实现安全性的理想方法是假定客户端上可以访问任何内容(几乎可以访问),并相应地对服务器端代码进行编码。这意味着,如果您具有管理区域,则假定任何人都可以访问它。您可以在servermethods
和publications
for中进行检查,并在this.userId
其中进行数据库查找,以确保用户具有正确的特权。同样,该指南提供了有关此的更多信息:http : //guide.meteor.com/security.html
关于导入/导出的最后一点:它们背后的想法不是减少代码大小,而是提供一个实际使用的图形(并保留未使用的文件),以使热代码重新加载更快,从而更好开发经验。它们还使应用程序的代码更清晰易懂,因为您没有随处可见的随机魔术全局变量,并且有助于将逻辑上不同的代码段分开。
祝你好运:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句