1. ホーム
  2. javascript

[解決済み] node.jsアプリで外部.jsファイルをインクルードする

2023-01-24 21:57:14

質問

私は app.js の node アプリケーションを持っています。このファイルが大きくなり始めたので、app.js ファイルで "require" または "include" する他のファイルに、コードの一部を移動したいと思います。

私は次のようなことを試しています。

// 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プロジェクトでそのようにグローバルを使っている人であれば、私はそのためのユースケースがあまりにも少ないので、それらをリファクタリングします(いくつかの例外がありますが、これはその1つではありません)。

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