在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) }; })