2017-01-27 22 views
0

Я новичок в node.js (и javascript), и я следую учебнику о том, как получить хорошую структуру для приложения.Node.js: организация моего приложения: использование маршрутов и моделей в отдельных файлах, как я могу получить модели из маршрутов?

Во-первых, я хотел иметь свои маршруты в отдельной папке.

Допустим, это мой main.js:

var express = require('express'); 

const PORT = 3000; 
const app = express(); 

app.set("json spaces", 2); 

require('./routes')(app); 

app.listen(PORT, function() { 
    console.log(`users-jwt-api - Port ${PORT}`) 
}); 

В моей "маршрутах" папка, у меня есть два файла: index.js, используемый для загрузки других файлов, и user.js

index.js:

var fs = require('fs'); 

module.exports = function(app){ 
    fs.readdirSync(__dirname).forEach(function(file) { 
     if (file == "index.js") return; 
     var name = file.substr(0, file.indexOf('.')); 
     require('./' + name)(app); 
    }); 
} 

user.js:

module.exports = function(app) { 
    app.get('/users', function(req, res) { 
     //no bd yet, returning static data, and dont want it here, but in a model 
     res.json({users:[{username: "titi", password:"toto"},{username: "tata", password:"tutu"}]}); 
    }); 
}; 

Это работает как шарм! Хорошо.

Но, чтобы быть ясным, мне не нужен код базы данных в файлах маршрутов, поэтому я пытаюсь добавить папку «models». Я положил внутри index.js, так же, как и для маршрутов, и users.js так:

module.exports = function(app) { 
    return { 
     findAll: function(params, callback) { 
     //no db yet 
     return callback([{username: "titi", password:"toto"},{username: "tata", password:"tutu"}]); 
     } 
    }; 
}; 

Я изменил мой main.js, добавив это, как раз перед маршрутами:

require('./models')(app); 

Вопрос в том, что я не знаю, как изменить свои маршруты/user.js, чтобы назвать эту модель!

Я хотел бы иметь что-то подобное в маршрутах/users.js:

module.exports = function(app) { 
    const Users = app.models.users; // not working here : TypeError: Cannot read property 'users' of undefined 
    app.get('/users', function(req, res) { 
     Users.findAll({}, function(users) { 
     res.json({users: users}); 
     }); 
    }); 
}; 

Как я могу использовать мою модель с помощью приложения вар?

примечание: я нашел решение с модулем под названием «config» для инъекций зависимостей, но я бы предпочел использовать простое кодирование перед использованием таких мощных ярлыков.

Любая помощь оценена! Благодаря !

ответ

0

Если вы хотите получить доступ к models вам нужно определить его как свойство на app Это работа models.js, я бы сказал. Вы передаете приложение до models.js, но не меняете его вообще.

Я бы рекомендовал изменения models.js быть больше, как это:

module.exports = function(app) { 
    app.models = { 
    users : // import db and return users so routes can avail of them 
    }; 
}; 
+1

Спасибо большое! Понял ! – Julien

 Смежные вопросы

  • Нет связанных вопросов^_^