У меня есть приложение узла 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, в котором я участвовал, я бы реорганизовал их, поскольку для этого очень мало вариантов использования (есть несколько исключений, но это не один).
в car.js
источник
return {models: {car: CarModel, dealer: CarDealer}, carStuff: carStuff}
Обычно правильный ответ - использовать require, но в некоторых случаях это невозможно.
Следующий код поможет, но используйте его осторожно:
источник
#include
?Короткий ответ:
источник
Cannot find module lib.js
.require('./lib.js').your_function()
вы можете положить
в верхней части файла car.js, чтобы он работал, или вы можете сделать то, что сказал Рейнос.
источник
Если вы просто хотите протестировать библиотеку из командной строки, вы можете сделать:
источник
Этот подход работает для меня в Node.js. Есть ли проблемы с этим ?
Файл include.js:
Файл main.js:
источник