[javascript] 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

동일한 app.js 파일에 모든 것을 포함하는 대신 car.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)
    };
})


답변