在node.js应用程序中包含外部.js文件

我有一个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?

要强调其他人一直在说的顶级var foo不会创build一个全局variables。 如果你想要一个全局variables,那么写global.foo 。 但是我们知道全能是邪恶的。

如果你是一个在Node.js项目中使用全局variables的人,那么我会重构它们,因为只有这么less的用例(有一些例外,但这不是一个)。

 // 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; 

正确的答案通常是使用require,但在less数情况下是不可能的。

下面的代码将做的伎俩,但小心使用它:

 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"); 

简短的回答:

 // lib.js module.exports.your_function = function () { // Something... }; // app.js require('./lib.js').your_function(); 

你可以放

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; 

在你的car.js文件的顶部工作,或者你可以做雷诺斯说的。

如果你只是想从命令行testing一个库,你可以这样做:

 cat somelibrary.js mytestfile.js | node 

这个方法适用于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) }; })