J'ai une application de noeud app.js. Alors que ce fichier commence à grossir, j'aimerais déplacer une partie du code dans d'autres fichiers que je voudrais "exiger" ou "inclure" dans le fichier app.js.
J'essaie des choses comme:
// 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');
en voiture.js:
// Define Car model
CarSchema = new Schema({
brand : String,
type : String
});
mongoose.model('Car', CarSchema);
J'ai eu l'erreur:
ReferenceError: Schema is not defined
Je cherche simplement à charger le contenu de car.js (au lieu de tout avoir dans le même fichier app.js). Existe-t-il un moyen particulier de procéder dans node.js?
Mettre l'accent sur ce que tout le monde a dit var foo
au plus haut niveau ne crée pas de variable globale. Si vous voulez une variable globale, écrivez global.foo
. mais nous tous savons que les globaux sont diaboliques.
Si vous êtes quelqu'un qui utilise des globales comme celui-ci dans un projet node.js, je les refactoriserais car il y a très peu de cas d'utilisation pour cela (il existe quelques exceptions, mais ce n'en est pas un).
// 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);
en voiture.js
function make(Schema, mongoose) {
// Define Car model
CarSchema = new Schema({
brand : String,
type : String
});
mongoose.model('Car', CarSchema);
}
module.exports.make = make;
La bonne réponse est généralement d'utiliser, mais dans certains cas, ce n'est pas possible.
Le code suivant fera l'affaire, mais utilisez-le avec précaution:
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");
Réponse courte:
// lib.js
module.exports.your_function = function () {
// Something...
};
// app.js
require('./lib.js').your_function();
vous pouvez mettre
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
en haut de votre fichier car.js pour que cela fonctionne, ou vous pouvez faire ce que Raynos a dit de faire.
Si vous voulez juste tester une bibliothèque à partir de la ligne de commande, vous pouvez faire:
cat somelibrary.js mytestfile.js | node
Cette approche fonctionne pour moi dans Node.js, Y at-il un problème avec celui-ci?
Fichier 'include.js':
fs = require('fs');
Fichier '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)
};
})