Как обрабатывать серверную часть узла с помощью react

#node.js #express

#node.js #экспресс

Вопрос:

Я работаю над проектом react и node. Я новичок в обеих технологиях, и я разработал систему для своей стажировки. Но я чувствую, что я неправильно обрабатывал серверную часть (часть узла). Это мой файл на стороне сервера. Он содержит почти 700 строк. Должен ли я разбивать эту страницу на несколько страниц? Если да, то как именно я должен это сделать? Может кто-нибудь дать мне предложение, пожалуйста. Приложение работает должным образом. Я просто хочу очистить код на стороне сервера. Я использовал express framework с node.

 var express = require('express');
var mysql = require('mysql');
var _ = require('underscore');
var crypto = require('crypto');

var app = express();
var connections = [];
var title = 'Fishery Logistics';
var flds = [];
var currentFld = '';
var fldDetails = [];
var lfrSaved = false;
var userSiteInfoSaved = false;
var userList = [];
var userTypes = [];
var validUserName = false;
var fldNumbers = [];
var productCodes = [];
var containerTypes = [];
var areaCodes = [];
var fldRows = 0;
var fldInfo = {};
var productInfo = {};
var weighInList = {};
var weighInSaved = false;
var weighInNumbers = [];
var weighInWeights = [];
var fldHeaderInfo = [];
var weighInHeaderInfo = [];
var fldWeights = [];
var userDeleted = false;

// From where express should access our files
app.use(express.static('./public'));
app.use(express.static('./node_modules/bootstrap/dist'));

var server = app.listen(process.env.PORT || 3000);
// Creating a socket server which is also listeing to localhost:<port>
var io = require('socket.io').listen(server);

var connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: '',
    database: 'fish_landing'
});

io.sockets.on('connection', function(socket) {

    // Load fld list relevant to a LFR
    socket.on('lfrFldListLoad', function(payload) {
        var lfr_id = payload.lfrId;
        var sql_lfr_fld_list = 'SELECT F.fld_id, F.fld_number, DATE_FORMAT(F.landed_date, "%Y-%m-%d") AS "landed_date", F.vessel_name, F.port_name, F.transport_company_name, F.driver_name, truck_number, FS.status '  
            'FROM fld F, fld_status FS, lfr L '  
            'WHERE F.status_id = FS.status_id '  
            'AND F.lfr_id = L.lfr_id '  
            'AND L.lfr_id = '   lfr_id  
            ' ORDER BY F.fld_id DESC';

        connection.query(sql_lfr_fld_list, function(error, result) {
            if (error) {
                console.log(error);
            }

            if (result.length !== 0) {
                flds = resu<
                io.sockets.emit('lfrFldListLoaded', flds);
            } else {
                console.log('No Records Found')
            }
        });
    });

    // Load fld with all the details
    socket.on('fldViewLoad', function(payload) {
        var fld_id = payload.fldId;

        var sql_fld_by_id =
            'SELECT F.fld_id, F.fld_number, DATE_FORMAT(F.landed_date, "%Y-%m-%d") AS "landed_date", DATE_FORMAT(F.landed_date, "%T") AS "landed_time", '  
            'F.port_name, F.vessel_name, F.skipper_name, F.transport_company_name, F.truck_number, F.driver_name, F.driver_license, F.vehicle_clean, '  
            'F.vehicle_refrigerated, F.containers_clean, F.containers_iced, F.skipper_signature, F.supervisor_signature, F.lfr_staff_signature, '  
            'F.skipper_signature_time, F.supervisor_signature_time, F.lfr_staff_signature_time, F.comment, FS.status, CONCAT(U.first_name, " ", U.last_name) AS "full_name", '  
            'DATE_FORMAT(F.fld_created_time, "%Y-%m-%d") AS "fld_created_date",  DATE_FORMAT(F.fld_created_time, "%T") AS "fld_created_time" '  
            'FROM fld F, fld_status FS, user_personal_info U  '  
            'WHERE F.status_id = FS.status_id '  
            'AND F.fld_created_user_id = U.user_id '  
            'AND F.fld_id = "'   fld_id   '"';

        var sql_fld_detail_list =
            'SELECT FD.fld_detail_id, SP.species, PS.state, C.container, FD.no_of_containers, FD.fld_id '  
            'FROM fld_details FD, species SP, processed_state PS, container C, fld F '  
            'WHERE F.fld_id = FD.fld_id '  
            'AND SP.species_id = FD.species_id '  
            'AND PS.state_id = FD.state_id '  
            'AND C.container_id = FD.container_id '  
            'AND F.fld_id = "'   fld_id   '"';

        connection.query(sql_fld_by_id, function(errorFld, resultFld) {
            if (errorFld) {
                console.log(errorFld);
            }

            if (resultFld.length !== 0) {
                currentFld = resultFld;

                connection.query(sql_fld_detail_list, function(errorFldDetails, resultFldDetails) {
                    if (errorFldDetails) {
                        console.log(errorFldDetails);
                    } else {
                        fldDetails = resultFldDetails;
                        io.sockets.emit('fldViewLoaded', currentFld, fldDetails);
                    }
                });
            } else {
                console.log('Fld Length Error')
            }
        });

    });

    // Save company info
    socket.on('saveCompanyInfo', function(payload) {
        var companyName = payload.companyName;
        var registrationNo = payload.registrationNo;
        var landlineNo = payload.landlineNo;
        var mobileNo = payload.mobileNo;
        var emailAddress = payload.emailAddress;
        var companyLogo = payload.companyLogo;
        var jsonFile = payload.jsonFile;

        var sql_save_company_info =
            `INSERT INTO lfr (lfr_name, registration_number, landline_number, mobile_number, email_address, lfr_logo, json_file) 
            VALUES ('${companyName}', '${registrationNo}', '${landlineNo}', '${mobileNo}', '${emailAddress}', '${companyLogo}', '${jsonFile}')`;

        connection.query(sql_save_company_info, function(errorLfrInfo, resultLfrInfo) {
            if (errorLfrInfo) {
                lfrSaved = false;
                console.log(errorLfrInfo);
            }

            if (resultLfrInfo) {
                lfrSaved = true;
            } else {
                lfrSaved = false;
            }

            io.sockets.emit('companyInfoSaved', lfrSaved);
        });
    });

    // Load user list for lfr
    socket.on('userListLoad', function(payload) {
        var lfrId = payload.lfrId;
        var load_user_list =
            `SELECT USI.user_id, USI.user_name, UT.user_type, USI.email_address, USI.passcord, US.status_type 
            FROM user_site_info USI, user_types UT, user_status US 
            WHERE USI.user_type_id = UT.user_type_id 
            AND USI.user_status_id = US.user_status_id 
            AND lfr_id = ${lfrId}`;

        connection.query(load_user_list, function(errorUserList, resultUserList) {
            if (errorUserList) {
                console.log(errorUserList);
            } else {
                userList = resultUserList;
                io.sockets.emit('userListLoaded', userList);
            }
        });
    });

    // Load organization form
    socket.on('loadOrganization', function() {
        io.sockets.emit('organizationLoaded');
    });

    // Load main form
    socket.on('loadMain', function() {
        io.sockets.emit('mainLoaded');
    });

    // Delete user
    socket.on('deleteUser', function(payload) {
        var lfrId = payload.lfrId;
        var userId = payload.userId;

        var delete_user =
            `UPDATE user_site_info 
            SET user_status_id = '2'
            WHERE user_id = ${userId}`;

        var load_user_list =
            `SELECT USI.user_id, USI.user_name, UT.user_type, USI.email_address, USI.passcord, US.status_type 
            FROM user_site_info USI, user_types UT, user_status US 
            WHERE USI.user_type_id = UT.user_type_id 
            AND USI.user_status_id = US.user_status_id 
            AND lfr_id = ${lfrId}`;

        connection.query(delete_user, function(error, result) {
            if (error) {
                console.log(error);
            }
            if (result) {
                connection.query(load_user_list, function(errorUserList, resultUserList) {
                    if (errorUserList) {
                        console.log(errorUserList);
                    } else {
                        userDeleted = true;
                        userList = resultUserList;
                        io.sockets.emit('userDeleted', userDeleted, userList);
                    }
                });
            } else {
                userDeleted = false;
            }
        });
    });

    // Delete weigh in
    socket.on('deleteWeighIn', function(payload) {
        var weighInId = payload.weighInId;

        var sql_delete_weigh_in =
            `DELETE FROM weigh_in
            WHERE weigh_in_id = ${weighInId}`;

        var sql_delete_weigh_in_details =
            `DELETE FROM weigh_in_details
            WHERE weigh_in_id = ${weighInId}`;

        connection.query(sql_delete_weigh_in, function(errorDeleteWightIn, resultDeleteWightIn) {
            if (errorDeleteWightIn) {
                console.log(errorDeleteWightIn);
            }

            connection.query(sql_delete_weigh_in_details, function(errorDeleteWightInDetails, resultDeleteWightInDetails) {
                if (errorDeleteWightInDetails) {
                    console.log(errorDeleteWightInDetails);
                }

                if (resultDeleteWightInDetails) {
                    io.sockets.emit('weighInDeleted');
                } else {
                    console.log('Weigh-In Deletion Error');
                }
            });
        });
    });


    // Reset weigh-in list
    socket.on('resetWeighInList', function() {
        io.sockets.emit('weighInListReset');
    });

    // Save user site info
    socket.on('saveUserSiteInfo', function(payload) {
        var userName = payload.userName;
        var userTypeId = payload.userType;
        var emailAddress = payload.emailAddress;
        var passcord = crypto.createHash('sha1').update(payload.passcord).digest("hex");
        var userStatusId = 1;
        var lfrId = payload.lfrId;

        var sql_user_site_info =
            `INSERT INTO user_site_info (user_name, user_type_id, email_address, passcord, user_status_id, lfr_id) 
            VALUES ('${userName}','${userTypeId}', '${emailAddress}', '${(passcord)}','${userStatusId}', '${lfrId}')`;

        var load_user_list =
            `SELECT USI.user_id, USI.user_name, UT.user_type, USI.email_address, USI.passcord, US.status_type 
            FROM user_site_info USI, user_types UT, user_status US 
            WHERE USI.user_type_id = UT.user_type_id 
            AND USI.user_status_id = US.user_status_id 
            AND lfr_id = ${lfrId}`;

        connection.query(sql_user_site_info, function(errorUserInfo, resultUserInfo) {
            if (errorUserInfo) {
                userSiteInfoSaved = false;
                console.log(errorUserInfo);
            }

            if (resultUserInfo) {
                userSiteInfoSaved = true;

                connection.query(load_user_list, function(errorUserList, resultUserList) {
                    if (errorUserList) {
                        console.log(errorUserList);
                    } else {
                        userList = resultUserList;
                        io.sockets.emit('userSiteInfoSaved', userSiteInfoSaved, userList);
                    }
                });

            } else {
                console.log('User Info Saving Error')
            }
        });
    });


    // Save weigh in info
    socket.on('saveWeighInRecord', function(payload) {
        var fldId = payload.fldId;
        var weighInId = payload.fldId;
        var productId = payload.productId;
        var containerId = payload.containerId;
        var amount = payload.amount;
        var netWeight = payload.netWeight;
        var areaId = payload.areaId;
        var userId = payload.userId;

        // Check if the record is the first of the weigh in id,
        var sql_check_weigh_in =
            `SELECT * FROM weigh_in
            WHERE weigh_in_id = '${weighInId}'`;

        connection.query(sql_check_weigh_in, function(errorCheck, resultCheck) {
            if (errorCheck) {
                console.log(errorCheck);
            }

            // If there is no recrod related to weigh in id, create the weigh in id
            if (resultCheck.length === 0) {
                var sql_weigh_in_header =
                    `INSERT INTO weigh_in (weigh_in_id, fld_id, logged_user_id, created_time) 
                    VALUES('${weighInId}', '${fldId}', '${userId}', NOW())`;

                connection.query(sql_weigh_in_header, function(errorHeader, resultHeader) {
                    if (errorHeader) {
                        console.log(errorHeader);
                    }
                });
            }
        });

        var sql_weigh_in_record =
            `INSERT INTO weigh_in_details (product_id, container_id, number_of_containers, net_weight, area_id, weigh_in_id)
            VALUES ('${productId}', '${containerId}','${amount}','${netWeight}','${areaId}','${weighInId}')`;

        var sql_load_records =
            `SELECT P.product_code, C.container, WD.number_of_containers, WD.net_weight, S.species_code, PS.state_code, G.grade, A.area_code
            FROM product P, container C, species S, processed_state PS, grade G, area A, weigh_in_details WD
            WHERE WD.product_id = P.product_id
            AND WD.container_id = C.container_id
            AND WD.area_id = A.area_id
            AND P.species_id = S.species_id
            AND P.state_id = PS.state_id
            AND P.grade_id = G.grade_id
            AND weigh_in_id = '${weighInId}' 
            ORDER BY weigh_in_detail_id ASC`;

        connection.query(sql_weigh_in_record, function(errorRecord, resultRecord) {
            if (errorRecord) {
                console.log(errorRecord);
            }
            if (resultRecord) {
                connection.query(sql_load_records, function(errorList, resultList) {
                    if (errorList) {
                        console.log(errorList);
                    } else {
                        weighInList = resultList;
                        io.sockets.emit('weighInRecordSaved', weighInList);
                    }
                });
            } else {
                console.log('Weigh In Saving Error')
            }
        });
    });


    // Load user types
    socket.on('loadUserTypes', function() {

        var sql_user_types =
            `SELECT user_type_id, user_type FROM user_types
            ORDER BY user_type ASC`;

        connection.query(sql_user_types, function(error, result) {
            if (error) {
                console.log(error);
            }

            if (result.length !== 0) {
                userTypes = resu<
                io.sockets.emit('userTypesLoaded', userTypes);
            } else {
                console.log('User Type Error')
            }
        });
    });

    // Load weigh-in numbers
    socket.on('loadWeighInNumbers', function(payload) {
        var lfrId = payload.lfrId

        var sql_load_weigh_in =
            `SELECT W.weigh_in_id 
            FROM weigh_in W, fld F
            WHERE W.weigh_in_id = F.fld_id
            AND F.lfr_id = ${lfrId}`;

        connection.query(sql_load_weigh_in, function(error, result) {
            if (error) {
                console.log(error);
            }

            if (result.length !== 0) {
                weighInNumbers = resu<
                io.sockets.emit('weighInNumbersLoaded', weighInNumbers);
            } else {
                console.log('Weigh-In Error')
            }
        });
    });

    // Load fld, weigh-in weights
    socket.on('loadWeighInWeights', function(payload) {

        // weigh_in table weigh_in_id and fld table fld_id are same
        var weighInId = payload.weighInId;

        var sql_load_fld_weights =
            `SELECT S.species, S.species_code, SUM(FD.no_of_containers * C.content_weight) AS 'fld_weight'
            FROM fld_details FD, species S, container C
            WHERE S.species_id = FD.species_id
            AND FD.container_id = C.container_id
            AND FD.fld_id = '${weighInId}'
            GROUP BY S.species_code, 'fld_weight'
            ORDER BY S.species_code`;

        var sql_load_weigh_in_weights =
            `SELECT S.species, S.species_code, SUM(WD.net_weight) AS 'weigh_in_weight'            
            FROM weigh_in_details WD, species S, product P, container C
            WHERE P.species_id = S.species_id
            AND WD.product_id = P.product_id
            AND WD.container_id = C.container_id
            AND WD.weigh_in_id = '${weighInId}'
            GROUP BY S.species_code, 'weigh_in_weight'
            ORDER BY S.species_code`;

        var sql_load_fld_info =
            `SELECT DATE_FORMAT(F.fld_created_time, "%Y-%m-%d") AS "fld_created_date", CONCAT(U.first_name, " ", U.last_name) AS "fld_created_by", COUNT(FD.fld_id) AS "fld_records"
            FROM fld F, user_personal_info U, fld_details FD
            WHERE F.fld_created_user_id = U.user_id
            AND F.fld_id = FD.fld_id
            AND F.fld_id = '${weighInId}'`;

        var sql_load_weigh_info =
            `SELECT DATE_FORMAT(created_time, "%Y-%m-%d") AS "weigh_in_created_date", CONCAT(U.first_name, " ", U.last_name) AS "weigh_in_created_by", COUNT(WD.weigh_in_id) AS "weigh_in_records"
            FROM weigh_in W, user_personal_info U, weigh_in_details WD
            WHERE W.logged_user_id = U.user_id
            AND W.weigh_in_id = WD.weigh_in_id
            AND W.weigh_in_id = '${weighInId}'`;

        connection.query(sql_load_fld_weights, function(errorFldWeights, resultFldWeights) {
            if (errorFldWeights) {
                console.log(errorFldWeights);
            }

            if (resultFldWeights.length !== 0) {
                connection.query(sql_load_weigh_in_weights, function(errorweighInWeights, resultWeighInWeights) {

                    if (errorweighInWeights) {
                        console.log(errorweighInWeights);
                    }

                    if (resultWeighInWeights.length !== 0) {
                        connection.query(sql_load_fld_info, function(errorFldInfo, resultFldInfo) {

                            connection.query(sql_load_weigh_info, function(errorWeighInInfo, resultWeighInInfo) {

                                fldWeights = resultFldWeights;
                                weighInWeights = resultWeighInWeights;
                                fldHeaderInfo = resultFldInfo;
                                weighInHeaderInfo = resultWeighInInfo;
                                io.sockets.emit('weighInWeightsLoaded', fldWeights, weighInWeights, fldHeaderInfo, weighInHeaderInfo);
                            });
                        });

                    } else {
                        console.log('Weigh-In Weights Error')
                    }
                });
            }
        });
    });

    // Load weigh in combo boxes
    socket.on('loadWeighInComboBoxes', function(payload) {
        var lfr_id = payload.lfr_id;

        var sql_load_fld_numbers = `
                        SELECT fld_id, fld_number FROM fld WHERE lfr_id = '${lfr_id}'
                        ORDER BY fld_number DESC `;
        var sql_load_product_codes = `
                        SELECT product_id, product_code FROM product ORDER BY product_code ASC `;
        var sql_load_containers = `
                        SELECT container_id, container FROM container WHERE lfr_id = ${lfr_id} ORDER BY container ASC`;
        var sql_load_area_codes = `
                        SELECT area_id, area_code FROM area ORDER BY area_code ASC `;

        connection.query(sql_load_fld_numbers, function(errorFld, resultFld) {
            if (errorFld) {
                console.log(errorFld);
            }

            connection.query(sql_load_product_codes, function(errorProducts, resultProducts) {
                if (errorProducts) {
                    console.log(errorProducts);
                }

                connection.query(sql_load_containers, function(errorContainer, resultContainer) {
                    if (errorContainer) {
                        console.log(errorContainer);
                    }

                    connection.query(sql_load_area_codes, function(errorArea, resultArea) {
                        if (errorArea) {
                            console.log(errorArea);
                        }

                        fldNumbers = resultFld;
                        productCodes = resultProducts;
                        containerTypes = resultContainer;
                        areaCodes = resultArea;

                        io.sockets.emit('weighInComboBoxesLoaded', fldNumbers, productCodes, containerTypes, areaCodes);
                    });
                });
            });
        });

    });

    // Get fld info and weigh in records that are relavent to weighInId
    socket.on('loadFldWeighInInfo', function(payload) {
        var fldId = payload.fldId;
        var weighInId = payload.fldId;

        var sql_get_fld_count =
            `SELECT COUNT( * ) AS 'fld_rows'
            FROM fld_details WHERE fld_id = '${fldId}'`;

        var sql_get_fld_info =
            `SELECT DATE_FORMAT(F.fld_created_time, "%Y-%m-%d") AS "fld_created_date", DATE_FORMAT(F.fld_created_time, "%T") AS "fld_created_time", CONCAT(U.first_name, " ", U.last_name) AS "created_by"
            FROM fld F, user_personal_info U
            WHERE F.fld_created_user_id = U.user_id
            AND F.fld_id = '${fldId}'`;

        var sql_load_records =
            `SELECT P.product_code, C.container, WD.number_of_containers, WD.net_weight, S.species_code, PS.state_code, G.grade, A.area_code
            FROM product P, container C, species S, processed_state PS, grade G, area A, weigh_in_details WD
            WHERE WD.product_id = P.product_id
            AND WD.container_id = C.container_id
            AND WD.area_id = A.area_id
            AND P.species_id = S.species_id
            AND P.state_id = PS.state_id
            AND P.grade_id = G.grade_id
            AND weigh_in_id = '${weighInId}'
            ORDER BY weigh_in_detail_id ASC `;

        connection.query(sql_get_fld_count, function(errorFldCount, resultFldCount) {
            if (errorFldCount) {
                console.log(errorFldCount);
            }

            connection.query(sql_get_fld_info, function(errorFldInfo, resultFldInfo) {
                if (errorFldInfo) {
                    console.log(errorFldInfo);
                }

                connection.query(sql_load_records, function(errorList, resultList) {
                    if (errorList) {
                        console.log(errorList);
                    } else {
                        fldRows = resultFldCount;
                        fldInfo = resultFldInfo;
                        weighInList = resultList;
                        io.sockets.emit('fldWeighInInfoLoaded', fldRows, fldInfo, weighInList);
                    }
                });
            });
        });
    });

    // Get product info
    socket.on('loadProductInfo', function(payload) {
        var productId = payload.productId;

        var sql_get_product_info =
            `SELECT P.product_code, S.species_code, PS.state_code, G.grade
            FROM product P, species S, processed_state PS, grade G
            WHERE P.species_id = S.species_id
            AND P.state_id = PS.state_id
            AND P.grade_id = G.grade_id
            AND P.product_id = '${productId}'`;

        connection.query(sql_get_product_info, function(error, result) {
            if (error) {
                console.log(error);
            }

            if (result.length !== 0) {
                productInfo = resu<
                io.sockets.emit('productInfoLoaded', productInfo);
            } else {
                console.log('No Records Found')
            }
        });

    });

    // Load user types
    socket.on('checkUserName', function(payload) {
        var userName = payload.userName;

        var sql_check_user_name =
            `SELECT * from user_site_info
            WHERE user_name = '${userName}'`;

        connection.query(sql_check_user_name, function(error, result) {
            if (error) {
                console.log(error);
            }

            if (result.length !== 0) {
                validUserName = false;
            } else {
                validUserName = true;
            }
            io.sockets.emit('userNameChecked', validUserName);
        });
    });

    // socket.emit => emit events that are handled by the client
    socket.emit('welcome', {
        title: title,
        flds: flds,
        currentFld: currentFld,
        fldDetails: fldDetails,
        lfrSaved: lfrSaved,
        userSiteInfoSaved: userSiteInfoSaved,
        userList: userList,
        userTypes: userTypes,
        fldNumbers: fldNumbers,
        productCodes: productCodes,
        containerTypes: containerTypes,
        areaCodes: areaCodes,
        fldRows: fldRows,
        fldInfo: fldInfo,
        productInfo: productInfo,
        weighInList: weighInList,
        weighInNumbers: weighInNumbers,
        weighInWeights: weighInWeights,
        fldHeaderInfo: fldHeaderInfo,
        weighInHeaderInfo: weighInHeaderInfo,
        fldWeights: fldWeights,
        userDeleted: userDeleted
    });

    connections.push(socket);
});

console.log(`Fishery Logistics is running at port ${ server.address().port }`);
  

Ответ №1:

Вы обязательно должны разбить это на несколько модулей. Эмпирическое правило заключается в том, чтобы иметь модули и модели контроллера.

Комментарии:

1. вы можете поместить все свои прослушиватели и эмиттеры сокетов в контроллер и добавить его в качестве модуля