Add E2E tests for the UI. Highly recommend Cypress (cypress.io/)
This is a pretty small app but consider TypeScript as a future option
Use input validation on routes as a middleware, for example npmjs.com/package/@dotvirus/yxc (biased opinion because my brother wrote the package but it's dead simple to use as a validation middleware in express).
One example in your code would be here where you access req.notes_data_id but it is nowhere assured that this isn't undefined
github.com/abhijit-hota/Node-Notes...
This would throw a 400 to your express-error-handler whenever the request wasn't met, thus completely skipping the express-route-body and you are ensured that all your variables you get from req are actually there :)
Hey! Thank you for taking your time to write this. 😄
I will surely try to follow the tips you suggested.
I honestly had no idea that we can 'add' linting to our applications. I just have ESLint installed as an extension in VSCode and that helps me a lot. Will look into it.
I still don't know what exactly unit testing is and how tests are supposed to be 'written' but I've been thinking to learn more about it. Will check out Ava and Cypress after I know what they really are.
I appreciate the feedback on adding input validation as a middleware. 😄
When adding eslint into your project you ensure that everyone uses the same settings. If you change your VsCode-settings and I want to collaborate to your repo - how do I get your lint-settings? ;)
Okay for unit tests it's pretty simple. You write code that tests your code. Imagine you have a function that adds two values
functionadd(first,second){returnfirst+second;}
To test your function with ava you could then say something like
/*
you define what the result of your function SHOULD be.
If your implementation of the add function was broken,
this would return an error telling you exactly what is wrong.
*/test("add function returns 3",t=>{t.is(add(1,2),3);// <-- this passes because 1+2 does indeed equal 3.// The line can be read as "Please ensure that the result of add(1, 2) equals 3"});
I hope it makes sense!
Cypress is purely for UI to help you simulate user inputs. You could write cypress-tests that click a textbox, enter a specific text and hit your sign-in button. All automated.
Looks pretty good so far and I couldn't see any real issues when glancing at the code. So good job for that!
To your question to make the app more production-level:
So with the package you could then say:
This would throw a 400 to your express-error-handler whenever the request wasn't met, thus completely skipping the express-route-body and you are ensured that all your variables you get from
req
are actually there :)Hey! Thank you for taking your time to write this. 😄
I will surely try to follow the tips you suggested.
I honestly had no idea that we can 'add' linting to our applications. I just have ESLint installed as an extension in VSCode and that helps me a lot. Will look into it.
I still don't know what exactly unit testing is and how tests are supposed to be 'written' but I've been thinking to learn more about it. Will check out Ava and Cypress after I know what they really are.
I appreciate the feedback on adding input validation as a middleware. 😄
Again, thanks for the info!
When adding eslint into your project you ensure that everyone uses the same settings. If you change your VsCode-settings and I want to collaborate to your repo - how do I get your lint-settings? ;)
Okay for unit tests it's pretty simple. You write code that tests your code. Imagine you have a function that adds two values
To test your function with ava you could then say something like
I hope it makes sense!
Cypress is purely for UI to help you simulate user inputs. You could write cypress-tests that click a textbox, enter a specific text and hit your sign-in button. All automated.
Thanks a lot for explaining the concepts!
I'll definitely try to implement them.