簡體   English   中英

Node.js:組織我的應用程序:在單獨的文件中使用路由和模型,如何從路由中獲取模型?

[英]Node.js : organising my application : using routes and models in separate files, how can I get models from routes?

我是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}`)
});

在我的“ routes”文件夾中,我有兩個文件:用於加載其他文件的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);

問題是,我不知道如何修改我的route / user.js來調用此模型!

我想在route / 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”的模塊用於依賴項注入的解決方案,但是在使用這種功能強大的快捷方式之前,我寧願使用簡單的編碼。

任何幫助表示贊賞! 謝謝 !

如果您想訪問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
   };
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM