Как разбить код в модулях в Node.JS?

У меня есть следующий код, который необходимо использовать в двух файлах:

var Schema = mongoose.Schema;

var InfoSchema = new Schema ({
 name: String,
 email: String,
});

var Info = mongoose.model('Info', InfoSchema);

Мне нужно использовать переменную Info в моем спискеTerminal.js, и мне нужно использовать InfoSchema на моих маршрутах. Js.

Я новичок в Node.js и до сих пор довольно много путаю mod.exports. Может ли кто-нибудь дать мне свет?

Я пытался сделать так:

module.exports = function() {
 var Schema = mongoose.Schema;

 var InfoSchema = new Schema ({
 name: String,
 email: String,
 });
};

Они вызовут мои маршруты.js и listTerminal.js следующим образом:

var mySchema = require('../config/mongo/mySchema');

Но не работает, причина в моем route.js, у меня есть такой маршрут:

app.post('/person', function(req, res) {
 var Data = {
 name: req.body.name,
 email: req.body.email
 };

 var info = new Info(Data);

 info.save(function (error, data){
 if (error) {
 console.log(error);
 }
 else {
 console.log('done');
 }
 });
});

И страница показывает:

Info is not defined

Как я могу назвать этот mySchema.js в другом файле?

OBS: если я переведу код myschema.js в файл route.js, route.js будет работать, но мне нужно отдельное; [

2 ответа

Ваш модуль должен выглядеть так:

var Schema = mongoose.Schema;

var InfoSchema = new Schema ({
 name: String,
 email: String,
});

module.exports = mongoose.model('Info', InfoSchema);

Таким образом вы экспортируете модель, а не схему. Затем вы можете использовать его так:

var Info = require('../config/mongo/mySchema');

app.post('/person', function(req, res) {
 var Data = {
 name: req.body.name,
 email: req.body.email
 };

 var info = new Info(Data);

 info.save(function (error, data){
 if (error) {
 console.log(error);
 }
 else {
 console.log('done');
 }
 });
});


Когда вы это сделаете

var mySchema = require('../config/mongo/mySchema');

то mySchema становится тем, что является module.exports. module.exports. Поскольку это функция (в вашем случае), вы должны просто называть ее:

mySchema();

BTW: Я не знаю, почему вы определили его как функцию. Не может быть лучшей идеи.

licensed under cc by-sa 3.0 with attribution.