繁体   English   中英

在node.js app中包含外部.js文件

[英]include external .js file in node.js app

我有一个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不会创建一个全局变量。 如果你想要一个全局变量,那么写下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;

正确的答案通常是使用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");

简短回答:

// 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文件的顶部,它可以工作,或者你可以做Raynos所说的事情。

如果您只想从命令行测试库,则可以执行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM