meteor 1.3 app结构:将任务分成方法订阅

时间:2016-05-29 15:15:56

标签: javascript node.js meteor ecmascript-6

对于流星1.3知识渊博的人来说,这可能是一个非常简单的问题。

meteor application structure documentation建议将API拆分为几个文件,但我没有看到任何将它们重新组合在一起的示例。 我从Todo React Tutorial: Collections开始,我试图将/api/tasks.js分成两部分 tasks.js methods.js server/publications.js

我不知道我需要从tasks.js中的代码做出哪些更改才能正确导入移动到methods.js和server / publications.js的代码

感谢您的协助!

代码:http://www.github.com/Falieson/LearningReact/blob/meteor_todos/MeteorTodos_React/imports/api/tasks/tasks.js

2 个答案:

答案 0 :(得分:3)

这是一个相当广泛和自以为是的话题,因此我将尝试给出与“流星指南”中讨论的事项相关的简明答案。

首先,我将按照教程来完成其目的。对我来说,它似乎并不是要教你如何构建一个复杂的应用程序,而是要在一个基本的Meteor项目中掌握React。

项目结构问题没有明确的答案,因为它是相当自以为是的。一些按功能划分,另一些按功能划分;有些像深嵌套,有些人喜欢更平坦的结构。

主题是模块'显式import语法使您的依赖项显式,因此可以避免需要丢失语义的猜测或笨拙的文件名,并使查找每个符号的来源成为一项非常重要的任务。

应用程序结构教程也不完整,主要包括指南。

让我们假设类似于以下简单结构的东西,它与用例非常吻合:

.
├── client
│   └── main.js
├── imports
│   ├── api
│   │   ├── api.js
│   │   ├── api-server.js
│   │   └── module1
│   │       ├── collections.js
│   │       ├── methods.js
│   │       └── server
│   │           └── publications.js
│   ├── client
│   │   └── index.js
│   └── server
│       └── index.js
└── server
    └── main.js

imports目录中的任何内容都不会自动导入。这一切都始于server/main.jsclient/main.js 入口点

他们反过来导入imports/<target>/index.js,这是应用程序为每个目标(客户端/服务器)引导的地方。

由于某些api代码是特定于服务器的,因此您可能希望创建一个server-api.js文件或类似文件,以便导入服务器资源。

在引导过程中,服务器的index.js

import '../api/api-server';

api-server.js将:

import './api';
import './module1/server/publications';

client/index.js可以直接导入api.js

标准方法和出版物不会导出任何符号,因此不需要单独导入它们,只需要导入它们的文件。

api.js将:

import './module1/methods';

其中methods.jspublications.js将导入collections.js文件,假设他们需要它。

同样,这是一个非常广泛和自以为是的主题,有几种方法可以构建您的项目。

答案 1 :(得分:0)

我不确定我明白问题所在。我猜它是关于import陈述。

在您的原始任务文件中

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { check } from 'meteor/check';

您需要使用Meteor,Mongo中的函数/对象并检查包。

您需要查看代码所需的内容。在methods.js文件中,您使用的是Meteorcheck,但您没有使用Mongo。所以你要添加

import { Meteor } from 'meteor/meteor';
import { check } from 'meteor/check';

我还看到你在publication.js文件中声明了你的Mongo集合,这通常是不合适的。发布应仅在服务器上运行,而您的集合应在客户端和服务器上声明。

所以你应该移动这段代码

export const Tasks = new Mongo.Collection('tasks');

通常会进入task.js文件。

在这种情况下,在task.js中,当您宣布收藏时,您正在使用Mongo对象,而您需要

import { Mongo } from 'meteor/mongo';

在您的出版物中,目前您只需要

import { Meteor } from 'meteor/meteor';

还有问题,因为你使用export声明了任务对象,你需要导入它的方式与导入Meteor,Mongo和check相同,但作为你自己的包:

import { Tasks } from './tasks';

tasks.js文件位于同一文件夹中的文件。和

import { Tasks } from '../tasks';

如果它在子文件夹中。

这会以某种方式回答您的问题吗?如果您需要更多帮助,请更具体和/或包含一些错误日志。