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 -
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)
This is removed after removing all the data present in the database .
@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.
@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.
@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 .
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 -Similarly for classroom page
TypeError: /Users/ashishaggarwal/Desktop/stuff/sugar/server/sugarizer-server/dashboard/views/classrooms.ejs:101 99|
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)
This is removed after removing all the data present in the database .
I have started working on it and will soon launch a PR to fix it .
@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-L75If you change it to:
It works fine.
@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 .
@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.
@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 .
solved in #57