我有一个app.js节点应用程序。随着这个文件开始增长,我想将一部分代码移到app.js文件中“需要”或“包含”的其他文件中。
我正在尝试这样的事情:
// Declare application
var app = require('express').createServer();
// Declare usefull stuff for DB purposes
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
// THE FOLLOWING REQUIRE DOES NOT WORK
require('./models/car.js');
在car.js中:
// Define Car model
CarSchema = new Schema({
brand : String,
type : String
});
mongoose.model('Car', CarSchema);
我收到了错误:
ReferenceError: Schema is not defined
我只是想加载car.js的内容(而不是在同一个app.js文件中包含所有内容)在node.js中是否有一种特殊的方法可以做到这一点?
答案 0 :(得分:99)
要强调其他人在顶级中所说的var foo
并不会创建全局变量。如果你想要一个全局变量,那么写global.foo
。但我们所有都知道全局变量是邪恶的。
如果你是一个在node.js项目中使用全局变量的人,我会在那里重构它们,因为只有这么少的用例(有一些例外,但这不是一个)
// Declare application
var app = require('express').createServer();
// Declare usefull stuff for DB purposes
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
require('./models/car.js').make(Schema, mongoose);
car.js中的
function make(Schema, mongoose) {
// Define Car model
CarSchema = new Schema({
brand : String,
type : String
});
mongoose.model('Car', CarSchema);
}
module.exports.make = make;
答案 1 :(得分:54)
正确的答案通常是使用require,但在少数情况下,这是不可能的。
以下代码可以解决这个问题,但要小心使用它:
var fs = require('fs');
var vm = require('vm');
var includeInThisContext = function(path) {
var code = fs.readFileSync(path);
vm.runInThisContext(code, path);
}.bind(this);
includeInThisContext(__dirname+"/models/car.js");
答案 2 :(得分:18)
简短回答:
// lib.js
module.exports.your_function = function () {
// Something...
};
// app.js
require('./lib.js').your_function();
答案 3 :(得分:8)
你可以把
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
在你的car.js文件的顶部,以便它可以工作,或者你可以做Raynos所说的事情。
答案 4 :(得分:4)
如果您只想从命令行测试库,可以执行以下操作:
cat somelibrary.js mytestfile.js | node
答案 5 :(得分:0)
这种方法适用于Node.js,这个有问题吗?
文件'include.js':
fs = require('fs');
文件'main.js':
require('./include.js');
fs.readFile('./file.json', function (err, data) {
if (err) {
console.log('ERROR: file.json not found...')
} else {
contents = JSON.parse(data)
};
})