我的app.js require
这些文件:
var fs = require('fs');
var http = require('http');
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
// Custom Modules
fs.readdirSync(__dirname + '/models').forEach(function(filename) {
if (filename.indexOf('.js')) require(__dirname + '/models/' + filename)
});
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
所以,正如你所看到的,首先是mongoose,/ models / second中的模型文件和/ routes / last中的路径文件。在其中一个模型文件posts.js
中,我定义了这个:
var Post = mongoose.model('posts', postsSchema);
由于需要订单,我认为Post
可以从下面的 / models / require访问。但是,从Post
中访问/routes/index.js
之类的内容会引发错误,说明Post
未定义:
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
router.get('/submit/', function (req, res) {
var submission = new Post({
// ...
});
});
我可以从Post
内访问/models/posts.js
,但不能从其他任何地方访问{{1}}。我的错是什么?提前谢谢。
答案 0 :(得分:0)
每个模块都位于其自己的命名空间中,因此是常规的顶级变量定义,例如:
var Post = mongoose.model('posts', postsSchema);
不是全局可访问的变量。该变量只能在该模块中访问。
要扩展可以使用该变量的范围,您有以下几种选择:
您可以导出变量,以便您所在的require()
模块可以直接从导出访问模型。
您可以导出一种方法,允许require()
模型可以调用的任何人获取该变量。我将此称为" pull"出口模型,其他模块"拉"来自你的价值。
您可以调用其他模块中的方法并将变量发送给它们。我将此称为" push"导出模型,因为您正在向另一个模块发送值。
您可以使用nodejs global
符号显式声明全局。 global.Post = mongoose.model('posts', postsSchema);
。并且,代码中的其他位置可以以相同的方式引用它。