NodeJS: в поисках улучшений в моем коде, уникальной функции GET для нескольких таблиц и использования макета ejs - PullRequest
0 голосов
/ 26 октября 2018

Мне скучно создавать функции для разных таблиц, потом я начал сводить все к одной функции, но я младший программист, надеюсь найти мнения о своем коде.

Это краткоНапример, с 1 таблицей, но я работаю с 123 таблицами, и пока это работает хорошо, но я надеюсь узнать ваше мнение.

Поля заголовка таблицы JSON: Tableheads.json

   {
        "orders": {
                "fields": [
                    {"name": "ID"},
                    {"name": "Product ID"},
                    {"name": "Name"},
                    {"name": "Description"},
                    {"name": "Recommended Amount"},
                    {"name": "Minimum Amount"},
                    {"name": "State"},
                    {"name": "Created on"}]
            }
    }

Имя и заполнитель полей формы JSON: Tableforms.json

"orders": {
    "Tfields" : [
        {"name": "Product_id", "tname": "Product ID"},
        {"name": "NameProduct", "tname": "Name"},
        {"name": "Description", "tname": "Description"},
        {"name": "quantity_order", "tname": "Recommended Quantity"},
        {"name": "quantity_Min", "tname": "Minimum Quantity"}]
    },

JSON с именами таблиц: TableNames.json

{ 
    "users":"",
    "alerts":"",
    "orders":"",
    "inventary":"",
    "sales":"",
    "billing":""    
}

теперь в моем контроллере tables.js

var thead = require('../Helpers/Tableheads'),
var tname = require('../Helpers/TablesNames'),
var tform = require('../Helpers/Tableforms');
var db    = require('../dbConfig');

exports.Genetal_table_get =function(req, res){
  var Table = req.params.Tablename ;

  if(tname[Table]){   //it checks if "Tablename" is in Tablenames.json
    var Thead = thead[Table]; //we assign the Head values
    var Tform = tform[Table].Tfields; //we assign the Form values

    getTable(Table,function(rows){  
        return  res.render('table',{table :{ 
        name : Table,
        head: Thead, 
        body : rows }, //all the records in the table 
        Tform : Tform }); // end render
    }); // end getTable function

  } // end if
};

function getTable(table, done) {
  db.get().query('SELECT * FROM  ?? ',[table] ,function(err, rows, fields) {
    if (err) throw err;
    done(rows);
  });
}

route: tables.js

var table = require('../controller/tables');
router.get('/user/:userid/table/:Tablename/list', table.Genetal_table_get);

позже с EJS, в моей таблице макетов я просто обрабатываю значения следующим образом:

Внутри формы для добавления новых записей:

<% Tform.forEach(function(item){ %>
      <input name='<%= item.name %>' type="text" class="form-control" placeholder='<%= item.tname %>' required="">                                                            
 <% }); %>

внутри таблицы:

<thead>
   <tr>
     <%  table.head.fields.forEach(function(item) { %>
           <th><%= item.name %></th>
     <% }); %>                                         
   </tr>
</thead>

Чтобы обработать это использование Tbody, я делаю «include» в зависимости от имени таблицы, которое сохраняется в «table.name» в render:

 <tbody> 
      <% if(table.name == 'users'){  %>
             <%- include ./ShareTable/body_users %>
      <% } %>
      <% if(table.name == 'orders'){  %>
             <%- include ./ShareTable/body_orders %>
      <% } %>   
        ....-> many others the same
   </tbody>

и для tbody я создаю файл .ejs, так как каждая таблица обрабатывает разныестолбцы, меньшим примером будет body_users.ejs, где мы используем «table.body», где сохраняются строки таблицы sql:

<%  for(var i=0; i<table.body.length; i++){ %>
                <tr>
            <td><%= table.body[i].id %>
            </td>
            <td><%= table.body[i].username %>
            </td>
            <td><%= table.body[i].password %>
            </td>
            <td><%= table.body[i].email %>
            </td>
            <td><%= table.body[i].rol %>
            </td>
            <td><%= table.body[i].IsActive %>
            </td>
            <td><%= table.body[i].lastLogin  %>
            </td>

        </tr>
        <% } %>

Я надеюсь прочитать ваши мнения или рекомендации.

...