DEV Community


Posted on • Updated on

WIP => Making Sense of ORM Chaos

Getting lost in the sauce that is setting EVERYTHING up for ORM projects.

Node.js is the language to build and talk to a server. Express is a framework to make that easier. Bootstrap is to CSS as Express is to Node.js.

I'm working through setting up an ecommerce backend by modifying starter code and configuring a working Express.js API to use Sequelize to interact with a MySQL database. S

So I'll need to do a few things in the set up.

The Set Up

Add npm files to package.json and update with name of project (include sequelize, express, dotenv, mysql2)

Look through the package json to see what's already been set up for commands to run - run seed, nodemon

npm i sequelize
npm i express
npm i dotenv
npm i mysql2
Enter fullscreen mode Exit fullscreen mode

these were all included in the code provided in wustl
Copy server file (express)
Create connection folder and copy over connection.js file
Create .env file and update db name for project

Set up database

mysql -u root -p
SOURCE schema.sql
npm run seed
Enter fullscreen mode Exit fullscreen mode

run server
node server.js

The Data

When actually starting to code, we need to start by setting up the Models. But first, let's visualize the data by working our way back from Routes.

In the database, each table will require it's own model and route. These are all brought together using "index.js" located in each folder.
So the main route index pulls all the routes together under /api to be used in the server file. We are expected to get JSON back.


The router folder index creates the paths for each individual route set up: /travellers, /locations, /trips.


And then the Models index links together the individual models traveller, location, trip



We were provided with Seeds which gives us an example of each data table that should be created which can then help us build the models


Set up Model folder and models
Add references snippets to Models
Create model index: Product, Category, Tag, ProductTag

  1. Define columns for each column (Add validation, include decimals)
  2. Extend Product model to set up fields and rules (need to figure out where this is used and then complete)
  3. Finish model index

Validation Scaffolding:

user.init({id: {}, username:{type:, validate: {}},sequelize...});
Enter fullscreen mode Exit fullscreen mode

Indexing Models

Define a Driver as having one License to create a foreign key in the license table. Also define the association starting with License. If driver is deleted, cascade also deleted the associated License.

Driver.hasOne(License, {
foreignKey: 'driver_id',
onDelete: 'CASCADE'
Enter fullscreen mode Exit fullscreen mode


License.belongsTo(Driver, {
foreignKey: 'driver_id',
Enter fullscreen mode Exit fullscreen mode

Define a Driver as having many Cars, thus creating a foreign key in the 'car' table.

Driver.hasMany(Car, {
foreignKey: 'driver_id',
onDelete: 'CASCADE', });
Car.belongsTo(Driver, {
foreignKey: 'driver_id', });
Enter fullscreen mode Exit fullscreen mode

Define the third table needed to store the foreign keys

Location.belongsToMany(Traveller, {
through: {
model: Trip,
unique: false}, 
as: 'location_travellers'});
Enter fullscreen mode Exit fullscreen mode

How to test these... run the seeds through the database.


Index has been set up for us: /categories, /products, /tags

To Dos:

  1. Category Routes & Insomnia set up
  2. Product Routes & Insomnia set up
  3. Tag Routes & Insomnia set up


The purpose of the GET route is to find all the data and return as json so we can then use that data in other areas/services (ie. all locations). Can also bring in filtered data (ie. a single location).

Async Await scaffolding:

router.get('/', async (req, res) => {try{}catch(err){}}
Enter fullscreen mode Exit fullscreen mode

I started to set up my first GET route in Insomnia to test, and ran into to do item in the body-parser. This is part of express middleware that needs to be configured.

Misc. Notes

What do the different status codes mean for each?
Are we supposed to push to github with our .env file included?
add to .gitignore >> the name of that file is there so we don't need to worry about it in this project


Top comments (0)