llaske / sugarizer-server

Sugarizer Server allow deployment of Sugarizer on a local server, for example on a school server.
Apache License 2.0
42 stars 92 forks source link

Classroom and User page crash #56

Closed ashish0910 closed 5 years ago

ashish0910 commented 5 years ago

Steps to reproduce - 1.Start the server 2.Go to http://127.0.0.1:8080/dashboard/classrooms 3.Click on edit to edit any one the class 4.Now click on any one of the student in the left hand side search student box (this will shift student to the right hand side box). 5.Now click save The server will crash . It will give error like this in the terminal .

FATAL ERROR, uncaught exception 'classroomResponse.students.map is not a function' TypeError: classroomResponse.students.map is not a function at /Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/api/controller/classrooms.js:465:55 at result (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb/lib/utils.js:414:17) at session.endSession (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb/lib/utils.js:401:11) at ClientSession.endSession (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb-core/lib/sessions.js:129:41) at executeCallback (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb/lib/utils.js:397:17) at handleCallback (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb/lib/utils.js:128:55) at cursor.next (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb/lib/operations/collection_ops.js:598:5) at result (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb/lib/utils.js:414:17) at executeCallback (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb/lib/utils.js:406:9) at handleCallback (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/mongodb/lib/utils.js:128:55) [nodemon] app crashed - waiting for file changes before starting...

on Restarting the server , the server will start but on going to http://127.0.0.1:8080/dashboard/users?lang=en following error occurs -

screenshot 2019-03-04 at 1 04 19 pm

Similarly for classroom page

TypeError: /Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/dashboard/views/classrooms.ejs:101 99| 100| <% if(data.classrooms[i].students.length > 0) { %>

101| 102| <% } else { %> 103| 104| <% } %>

data.classrooms[i].students.join is not a function at eval (eval at compile (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/ejs/lib/ejs.js:592:12), :234:45) at returnedFn (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/ejs/lib/ejs.js:623:17) at tryHandleCache (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/ejs/lib/ejs.js:251:36) at View.exports.renderFile [as engine] (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/ejs/lib/ejs.js:480:10) at View.render (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/express/lib/view.js:135:8) at tryRender (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/express/lib/application.js:640:10) at Function.render (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/express/lib/application.js:592:3) at ServerResponse.render (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/express/lib/response.js:1008:7) at ServerResponse.res.render (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/node_modules/express-flash/lib/express-flash.js:29:16) at Request._callback (/Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/dashboard/controller/classrooms.js:55:8)

screenshot 2019-03-04 at 1 05 19 pm

This is removed after removing all the data present in the database .

ashish0910 commented 5 years ago

I have started working on it and will soon launch a PR to fix it .

NikhilM98 commented 5 years ago

@ashish0910 good job finding the issue. I faced similar issue while testing. This issue is caused because classroom.students is not an array. When you sent the post request to create a classroom. You selected only one element.

This issue can be solved by adding a if statement here: https://github.com/llaske/sugarizer-server/blob/e4c373896485b850435366a5dac64aac66f0fd37/dashboard/controller/classrooms.js#L71-L75

If you change it to:

if (req.method == 'POST') {

    // validate
    req.body.name = req.body.name.trim();
    req.body.students = req.body.students || [];
    if (typeof req.body.students === 'string') {
        req.body.students = [req.body.students]
    }

It works fine.

ashish0910 commented 5 years ago

@NikhilM98 thanks for your suggestion . The basic idea was to convert the request sent in the form of an array rather than a single element .

NikhilM98 commented 5 years ago

@llaske @tarunsinghal92 I would recommend using Mongoose ODM for defining Models and making database query. Mongoose Models are good for defining the structure of a collection. The type check and structure check prevents inserting undesirable data in the document. It reduces the chances of NoSQL injection.

Mongoose can be added in the later release of the project. It maybe added as a part of Improve Sugarizer Server Dashboard idea. It'll help in stabalizing the project.

ashish0910 commented 5 years ago

@NikhilM98 yes its a good idea but I feel using mongoose can effect the performance when we have larger database and native mongodb driver will be faster .

ashish0910 commented 5 years ago

solved in #57