2015-02-09 56 views
0

对yeoman的默认meanjs应用程序有疑问。mean.js使用require without var

的express.js文件里面有像这样的声明:

// Globbing model files 
config.getGlobbedFiles('./app/models/**/*.js').forEach(function(modelPath) { 
    require(path.resolve(modelPath)); 
}); 

现在我明白,它得到所有的路径“./app/models/”里面的.js文件,但我我试图理解是独自站立

require(path.resolve(modelPath)); 

如何使用require函数而不将其设置为“var”?

这些包含文件的一个的一个例子是这样的:

'use strict'; 

/** 
* Module dependencies. 
*/ 
var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

/** 
* Article Schema 
*/ 
var ArticleSchema = new Schema({ 
    created: { 
     type: Date, 
     default: Date.now 
    }, 
    title: { 
     type: String, 
     default: '', 
     trim: true, 
     required: 'Title cannot be blank' 
    }, 

    content: { 
     type: String, 
     default: '', 
     trim: true 
    }, 
    user: { 
     type: Schema.ObjectId, 
     ref: 'User' 
    } 
}); 

mongoose.model('Article', ArticleSchema); 

此文件不公开什么。

那么,为什么要求用“var”调用并且没有暴露函数的内容呢?

这将如何允许内容稍后使用?

回答

1

express.js文件中的代码执行模型文件的内容。 MEAN.js模型文件的解析如下:

  1. 负载猫鼬和架构包,与所有的包括 模型沿(如果有的话)。

  2. 声明对于给定的模型

  3. 架构下注册的型号名称定模式(文章给出的示例)。

没有什么可返回的,因此缺少express.js文件中的任何变量赋值。从现在起,您可以通过您在第三部分中分配的标签来调用模型。因此,在你的控制器中,你会写出类似的东西;

var articles = Article.query(); 

这行代码将加载文章架构,并在后端运行所提供的查询()方法(默认情况下返回该模式下,数据库中的所有实例)。

一般来说,请记住;并非所有的功能都会返回一些东西

+0

好的。我对你的解释有了更好的理解。 – 2015-02-10 05:44:17

+0

另一个问题,但。代码'mongoose.model('Article',ArticleSchema)'注册对象'Article'在哪里?现在看我可以用“Article.query();”来调用它。 它是否被加载为某种全局对象? – 2015-02-10 05:46:32

+0

从现在开始,您不能只使用'文章',它必须包含在使用它的每个文件的顶部。例如,在'articles.server.controller.js'中,前几行中有'var Article = mongoose.model('Article');' – tkounenis 2015-02-10 06:25:42