Node.js:组织我的应用程序:在单独的文件中使用路由和模型,如何从路由中获取模型?

时间:2017-01-27 22:08:03

标签: javascript node.js express organization code-organization

我是node.js(和javascript)的新手,我正在学习如何为应用程序提供良好的结构。

首先,我想将我的路线放在一个单独的文件夹中。

让我们说这是我的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"}]});
   });
};

这就像一个魅力!细

但是,要清楚,我不想在我的路线文件中有任何数据库代码,所以我尝试添加一个"模型"夹。我把一个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);

问题是,我不知道如何修改我的routes / user.js来调用这个模型!

我想在routes / 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});
      });
   });
};

如何通过app var?

使用我的模型

注意:我找到了一个名为" config"的模块的解决方案。对于依赖注入,但在使用这种强大的快捷方式之前,我宁愿使用简单的编码。

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分: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
   };
};