{"id":1953,"date":"2020-03-07T00:53:52","date_gmt":"2020-03-07T01:23:52","guid":{"rendered":"https:\/\/ultering.com\/it4us\/?p=1953"},"modified":"2022-06-23T16:08:17","modified_gmt":"2022-06-23T16:38:17","slug":"node-js-using-sequelize-express-project-1-super-simple-project-for-beginners","status":"publish","type":"post","link":"https:\/\/ultering.com\/it4us\/?p=1953","title":{"rendered":"NODE.JS: USING SEQUELIZE &#8211; EXPRESS PROJECT 1: SUPER SIMPLE PROJECT FOR BEGINNERS &#8211; 1ST STEP"},"content":{"rendered":"<p>Revision 2022<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_73 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69f2d6c39b3fc\" class=\"ez-toc-cssicon-toggle-label\"><span class><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\" \/><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\" \/><\/svg><\/span><\/span><\/label><input type=\"checkbox\" id=\"ez-toc-cssicon-toggle-item-69f2d6c39b3fc\" checked aria-label=\"Toggle\"><nav><ul class=\"ez-toc-list ez-toc-list-level-1 \"><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#TARGET\" title=\"TARGET\">TARGET<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#SUPER_FAST_START_USING_THE_CODE_FROM_GITHUB_AND_ELEPHANTSQL\" title=\"SUPER FAST START USING THE CODE FROM GITHUB AND ELEPHANTSQL\">SUPER FAST START USING THE CODE FROM GITHUB AND ELEPHANTSQL<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#GENERAL_NOTES\" title=\"GENERAL NOTES\">GENERAL NOTES<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#PART_1_%E2%80%93_CREATING_THE_PROJECTS_FOLDER\" title=\"PART 1 &#8211; CREATING THE PROJECT&#8217;S FOLDER\">PART 1 &#8211; CREATING THE PROJECT&#8217;S FOLDER<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#PART2_%E2%80%93_CREATING_AN_EXPRESS_PROJECT\" title=\"PART2 &#8211; CREATING AN EXPRESS PROJECT\">PART2 &#8211; CREATING AN EXPRESS PROJECT<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#PART3_%E2%80%93_INSTALLING_NODEMON\" title=\"PART3 &#8211; INSTALLING NODEMON\">PART3 &#8211; INSTALLING NODEMON<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#PART4_%E2%80%93_INSTALL_PostgreSQLSEQUELIZE\" title=\"PART4 &#8211; INSTALL PostgreSQL\/SEQUELIZE\">PART4 &#8211; INSTALL PostgreSQL\/SEQUELIZE<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#PART5_%E2%80%93_RUNNING_THE_APP\" title=\"PART5 &#8211; RUNNING THE APP\">PART5 &#8211; RUNNING THE APP<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#PART6_%E2%80%93_PLAYING_WITH_SEQUELIZE\" title=\"PART6 &#8211; PLAYING WITH SEQUELIZE\">PART6 &#8211; PLAYING WITH SEQUELIZE<\/a><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#Testing_the_Sequelizes_Connection\" title=\"Testing the Sequelize&#8217;s Connection\">Testing the Sequelize&#8217;s Connection<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#Creating_Instances\" title=\"Creating Instances\">Creating Instances<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#Check_To_The_Datase_And_Check_The_Instance_Created\" title=\"Check To The Datase And Check The Instance Created\">Check To The Datase And Check The Instance Created<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#Running_Again_Using_createDB_turned_to_false\" title=\"Running Again Using createDB turned to false\">Running Again Using createDB turned to false<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#Inserting_Data\" title=\"Inserting Data\">Inserting Data<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#Find_An_Instance_By_Primary_Key\" title=\"Find An Instance By Primary Key\">Find An Instance By Primary Key<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#Find_by_Users_name\" title=\"Find by User&#8217;s name\">Find by User&#8217;s name<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#List_All_Instances\" title=\"List All Instances\">List All Instances<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#PART7_%E2%80%93_EXTRA_Going_further%E2%80%A6\" title=\"PART7 &#8211; EXTRA: Going further&#8230;\">PART7 &#8211; EXTRA: Going further&#8230;<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#PART8_%E2%80%93_DATABASE_CONNECTION_SETUP_%E2%80%93_DETAILS\" title=\"PART8 &#8211; DATABASE CONNECTION SETUP &#8211; DETAILS\">PART8 &#8211; DATABASE CONNECTION SETUP &#8211; DETAILS<\/a><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#OPTION_1_%E2%80%93_Using_cloud_service\" title=\"OPTION #1 &#8211; Using cloud service\">OPTION #1 &#8211; Using cloud service<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#_OPTION_2_%E2%80%93_Using_local_database_Instance\" title=\"&nbsp;OPTION #2 &#8211; Using local database Instance\">&nbsp;OPTION #2 &#8211; Using local database Instance<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/ultering.com\/it4us\/?p=1953\/#SOURCE_CODE\" title=\"SOURCE CODE\">SOURCE CODE<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"TARGET\"><\/span>TARGET<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div style=\"font-size: 16px; font-family: Verdana, Helvetica;\">\n<p>Learn Sequelize constructing a project using Node.js, Express, Sequelize for persistence using PostgreSQL, MariaDB (MySQL) or another database. Source code to download using&nbsp; Node.js v.16: GitHub, <a href=\"https:\/\/github.com\/alsdias\/node_sequelize_ultering_ml40643_1st_step\">node_sequelize_ultering_ml40643_1st_step<\/a><\/p>\n<p><strong>Project developed using Node.js version 16.<br>\nNode: 16.13.1<br>\nPackage Manager: npm 8.5.4<br>\nOS: win32 x64 (Windows 10)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"SUPER_FAST_START_USING_THE_CODE_FROM_GITHUB_AND_ELEPHANTSQL\"><\/span>SUPER FAST START USING THE CODE FROM GITHUB AND ELEPHANTSQL<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div style=\"font-size: 16px; font-family: Verdana, Helvetica;\">\n<p>Howto:<br>\n<a href=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/sequelize_tutorial_fast_start.txt\">sequelize_tutorial_fast_start<\/a><\/p>\n<div>\n<p>&#8211; help for debian install:<br>\n<a href=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/ultering_sequelize_tutorial_debian_install.txt\">ultering_sequelize_tutorial_debian_install<\/a><\/p>\n<\/div>\n<\/div>\n<div>\n<h2><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"GENERAL_NOTES\"><\/span><strong>GENERAL NOTES<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>1. The source code doesn&#8217;t include the <em>node_modules<\/em> folder content. Following the instructions, the <em>node_modules<\/em> content is automatically generated.<br>\n<strong>IMPORTANT NOTE:<br>\nJavaScript is a great language, but all languages have their weak point and fragilities. Backward compatibility is one of the JavaScript weaknesses.<\/strong><br>\n<strong>Make sure that your environment is compatible with the env used for this tutorial.<\/strong><\/p>\n<p>2. The tutorial assumes Windows since it is the most used O.S. For Linux or Mac, you may just convert the system&#8217;s commands, but those pertaining to Node.js or npm commands are the same.<\/p>\n<p>3. The $INSTALLDIR is the root dir where you&#8217;re supposed to place your project. For example, $INSTALLDIR=C:nodelab<\/p>\n<p>4. The tutorial assumes that commands are issued on a prompt (console).<\/p>\n<p>5. Although this tutorial uses PostgreSQL, it may be used any other database since the purpose of ORM is to provide a layer of abstraction for the database&#8217;s implementations. In this case, switch the configuration to match your choice, for instance, &#8220;dialect&#8221; property value must be replaced by the new value from your choice.<\/p>\n<p>6. The code available for download was implemented using Node.js v.16. Please, use the same version.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"PART_1_%E2%80%93_CREATING_THE_PROJECTS_FOLDER\"><\/span>PART 1 &#8211; CREATING THE PROJECT&#8217;S FOLDER<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Choose a place to create the project&#8217;s root dir and do:<\/p>\n<p>mkdir node<br>\ncd node<\/p>\n<p>&#8220;node&#8221; comes to be the project&#8217;s root dir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"PART2_%E2%80%93_CREATING_AN_EXPRESS_PROJECT\"><\/span>PART2 &#8211; CREATING AN EXPRESS PROJECT<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Under the project&#8217;s root dir (node), run the commands below as follow:<\/p>\n<p>&nbsp;<\/p>\n<pre class>npm install --save express express-generator\n\nnode_modules.binexpress -e -f\n\nnpm install --save\n<\/pre>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"PART3_%E2%80%93_INSTALLING_NODEMON\"><\/span>PART3 &#8211; INSTALLING NODEMON<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nodemon makes it easier to develop.<br>\nThe project is started once, and each change on the code is compiled updating the project.<br>\nNo need to restart. All projects from this series use Nodemon, but you may skip this step if desired.<br>\nIf you have worked with Angular, it does the same as ng.<\/p>\n<p>Under the project&#8217;s root dir, do:<\/p>\n<p>&nbsp;<\/p>\n<pre class>npm install --save nodemon\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Edit package.json file and add the following line:<\/p>\n<pre>\"nodemon\": \"nodemon .\/bin\/www\"\n<\/pre>\n<p>It becomes like this:<\/p>\n<pre>\"scripts\": {\n    \"start\": \"node .\/bin\/www\",\n    \"nodemon\": \"nodemon .\/bin\/www\"\n  },\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&#8211; Under project&#8217;s root dir, create a batch file &#8220;run.bat&#8221;, then edit it adding the following:<\/p>\n<p>rem SET DEBUG=node:* &amp; npm start<br>\nrem node binwww<br>\nSET DEBUG=node:*<br>\nnpm run nodemon<\/p>\n<p><em><br>\n<strong>Note<\/strong>: the commented lines (rem) are alternative commands.<br>\nIf you are using *nix (linux flavor), create a similiar script (run.sh).<\/em><\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"PART4_%E2%80%93_INSTALL_PostgreSQLSEQUELIZE\"><\/span>PART4 &#8211; INSTALL PostgreSQL\/SEQUELIZE<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>IMPORTANT NOTE:<\/strong><\/p>\n<p>For the sake of simplicity, it is not required to create a local database for this tutorial.<br>\nGo to the PART8 (below), or check the source code (also below).<br>\nYou may avoid creating the local database using the cloud instance offered here.<br>\nThe setback is that if somebody else may be using at the same time, conflicts may happen.<br>\nIn this case, just modify the table name from &#8220;user&#8221; to &#8220;myuser&#8221; or something else but I suppose this kind of conflict would be rare.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre class>Installing potgres:\nnpm install --save sequelize sequelize-cli\nnpm install --save pg pg-hstore\n\nInstalling sequelize:\nnpm install --save sequelize sequelize-cli dotenv\n\nIf necessary:\nnpm audit fix --force\n\nNote: dotenv is used to read envvars.\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"PART5_%E2%80%93_RUNNING_THE_APP\"><\/span>PART5 &#8211; RUNNING THE APP<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Since this project is a very simple one, everything will be placed in just one file.<br>\nOpen the file named &#8220;app.js&#8221; under the project&#8217;s root dir (under node):<\/p>\n<p>Into this file, it is going to be placed the code to run the examples.<br>\nThe <em>app.js name<\/em> is merely a convention.<br>\nIt&#8217;s also usual to be named &#8220;index.js&#8221; and whatever.<\/p>\n<p>If everything is as it was supposed to be, your project&#8217;s root dir shall be like this:<\/p>\n<p><noscript><img decoding=\"async\" class=\"wp-image-2007\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node1953_project_structure.png\" alt width=\"147\" height=\"178\"><\/noscript><img decoding=\"async\" class=\"wp-image-2007 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20147%20178%22%3E%3C%2Fsvg%3E\" alt width=\"147\" height=\"178\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node1953_project_structure.png\"><\/p>\n<p>&nbsp;<\/p>\n<p>The&nbsp; app.js content shall be like this:<\/p>\n<pre><\/pre>\n<pre class>var createError = require('http-errors');\nvar express = require('express');\nvar path = require('path');\nvar cookieParser = require('cookie-parser');\nvar logger = require('morgan');\n\nvar indexRouter = require('.\/routes\/index');\nvar usersRouter = require('.\/routes\/users');\n\nvar app = express();\n\n\/\/ view engine setup\napp.set('views', path.join(__dirname, 'views'));\napp.set('view engine', 'ejs');\n\napp.use(logger('dev'));\napp.use(express.json());\napp.use(express.urlencoded({ extended: false }));\napp.use(cookieParser());\napp.use(express.static(path.join(__dirname, 'public')));\n\napp.use('\/', indexRouter);\napp.use('\/users', usersRouter);\n\n\/\/ catch 404 and forward to error handler\napp.use(function(req, res, next) {\n  next(createError(404));\n});\n\n\/\/ error handler\napp.use(function(err, req, res, next) {\n  \/\/ set locals, only providing error in development\n  res.locals.message = err.message;\n  res.locals.error = req.app.get('env') === 'development' ? err : {};\n\n  \/\/ render the error page\n  res.status(err.status || 500);\n  res.render('error');\n});\n\nmodule.exports = app;\n\n<\/pre>\n<p>Execute the &#8220;run.bat&#8221;.<br>\nThe site starts returning successfully and Nodemon keeps it up to date for each modification proceeded in the code.<\/p>\n<p>Point to the site:<br>\nhttp:\/\/localhost:3000<\/p>\n<p>If everything is all right, you get this on the browser:<\/p>\n<p>&nbsp;<\/p>\n<p><noscript><img decoding=\"async\" class=\"size-full wp-image-2008\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node_express_default_page.png\" alt width=\"324\" height=\"205\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node_express_default_page.png 324w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node_express_default_page-300x190.png 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node_express_default_page-254x160.png 254w\" sizes=\"(max-width: 324px) 100vw, 324px\"><\/noscript><img decoding=\"async\" class=\"size-full wp-image-2008 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20324%20205%22%3E%3C%2Fsvg%3E\" alt width=\"324\" height=\"205\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20324%20205%22%3E%3C%2Fsvg%3E 324w\" sizes=\"(max-width: 324px) 100vw, 324px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node_express_default_page.png 324w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node_express_default_page-300x190.png 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node_express_default_page-254x160.png 254w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node_express_default_page.png\"><\/p>\n<p>&nbsp;<\/p>\n<p>Console output:<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignleft wp-image-2013 size-full\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node1953_output1.png\" alt width=\"412\" height=\"150\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node1953_output1.png 412w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node1953_output1-300x109.png 300w\" sizes=\"(max-width: 412px) 100vw, 412px\"><\/noscript><img decoding=\"async\" class=\"alignleft wp-image-2013 size-full lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20412%20150%22%3E%3C%2Fsvg%3E\" alt width=\"412\" height=\"150\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20412%20150%22%3E%3C%2Fsvg%3E 412w\" sizes=\"(max-width: 412px) 100vw, 412px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node1953_output1.png 412w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node1953_output1-300x109.png 300w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/node1953_output1.png\"><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"PART6_%E2%80%93_PLAYING_WITH_SEQUELIZE\"><\/span>PART6 &#8211; PLAYING WITH SEQUELIZE<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Testing_the_Sequelizes_Connection\"><\/span>Testing the Sequelize&#8217;s Connection<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Edit app.js file and place the code below before the &#8220;<strong>module.exports = app<\/strong>;&#8221; statement.<\/p>\n<p>Follow the comments on the snippet below to understand how Sequelize works.<br>\nNotice that the example comes with a Postgre&#8217;s cloud service that may be used for fast checking.<br>\nChange the connection configuration pointing to your own database. Check the code under &#8220;instantiates&#8221; comment.<br>\nThere is a topic at the end with details.<\/p>\n<pre class>var pg = require('pg');\n\/\/or native libpq bindings\n\/\/var pg = require('pg').native\n\n\/\/ instantiates \nvar Sequelize = require('sequelize')\n  , sequelize = new Sequelize({\n    username: \"username\",\n    password: \"secret\",\n    database: \"usename\",\n    host: \"xxx.elephantsql.com\",\n  port: 5432,\n    dialect: \"postgres\"\n});\n\n\/\/ test the connection\nsequelize\n  .authenticate()\n  .then(function(err) {\n    console.log('Connection has been established successfully.');\n  }, function (err) { \n    console.log('Unable to connect to the database:', err);\n  });\n\n<\/pre>\n<p>Server&#8217;s output:<\/p>\n<h3><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6876\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_01.jpg\" alt width=\"872\" height=\"258\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_01.jpg 872w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_01-300x89.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_01-768x227.jpg 768w\" sizes=\"(max-width: 872px) 100vw, 872px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6876 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20872%20258%22%3E%3C%2Fsvg%3E\" alt width=\"872\" height=\"258\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20872%20258%22%3E%3C%2Fsvg%3E 872w\" sizes=\"(max-width: 872px) 100vw, 872px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_01.jpg 872w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_01-300x89.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_01-768x227.jpg 768w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_01.jpg\"><\/h3>\n<p>Now that we made sure that the database connection is working fine, stop the application and we may go the next step.<\/p>\n<p><span style=\"color: #993366;\"><strong><br>\nWhy Should I stop the app?<\/strong><\/span><br>\nRemember that we are using nodemon.<br>\nAny change made in the code will restart the server automatically.<br>\nSometimes, it is not desired. For instance, if you have the createDb=true, it will drop all instances and recreate them.<br>\nThe data is lost.<br>\nRemember that the approach used here is didactic for the 1st step.<br>\nThe model will evolve in the next steps.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Creating_Instances\"><\/span>Creating Instances<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>When the app starts, the sequelize may create your table instances on the database, automatically.<br>\nThe following code does that.<br>\nAdd it just after the previous one and before the &#8220;module.exports = app;&#8221; statement.<br>\nPlease, make sure that you&#8217;ve stopped the app (Ctrl+C), before appending the new code.<\/p>\n<pre class><\/pre>\n<pre class>\/\/ Define a model to be used by the ORM.\nvar User = sequelize.define('User', {\n username: Sequelize.STRING,\n password: Sequelize.STRING\n}, {\n tableName: 'user', \/\/ this will define the table's name\n \/\/timestamps: false           \/\/ this will deactivate the timestamp columns\n})\n\n\n\/\/ PAY ATTENTION TO THIS VARIABLE: if true, sequelize recreates the tables.\nvar recreateDb = true;\n\nsequelize\n .sync({ force: recreateDb }) \/\/ if true, drops and recreates.\n .then(function(err) {\n  console.log('It worked!');\n }, function(err) {\n  console.log('An error occurred while creating the table:', err);\n });\n\nif (!recreateDb) {\n\n User.create({\n  username: 'john-doe',\n  password: 'i-am-so-great'\n }).then(function(user) {\n  console.log('[INFO]: john-doe persisted');\n  \/\/console.log(User)\n })\n\n}\n\n<\/pre>\n<p>Start the application again:<br>\nrun.bat<\/p>\n<p>Server&#8217;s output:<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6877\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02.jpg\" alt width=\"1901\" height=\"546\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02.jpg 1901w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02-300x86.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02-768x221.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02-1536x441.jpg 1536w\" sizes=\"(max-width: 1901px) 100vw, 1901px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6877 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201901%20546%22%3E%3C%2Fsvg%3E\" alt width=\"1901\" height=\"546\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201901%20546%22%3E%3C%2Fsvg%3E 1901w\" sizes=\"(max-width: 1901px) 100vw, 1901px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02.jpg 1901w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02-300x86.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02-768x221.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02-1536x441.jpg 1536w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_02.jpg\"><\/p>\n<p>&nbsp;<\/p>\n<p><strong>IMPORTANT<\/strong>:<br>\n<strong>After the instance is created, switch to false the recreateDB var:<\/strong><\/p>\n<p>var recreateDb = false;<\/p>\n<p><strong>&nbsp;<\/strong><\/p>\n<p><noscript><img decoding=\"async\" class=\"alignleft wp-image-1989 size-full\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/rin544_erd-1.png\" alt width=\"160\" height=\"171\"><\/noscript><img decoding=\"async\" class=\"alignleft wp-image-1989 size-full lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20160%20171%22%3E%3C%2Fsvg%3E\" alt width=\"160\" height=\"171\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/rin544_erd-1.png\"><\/p>\n<p>Each time that you execute the code (or change it) using the configuration where force = true, the table (or tables) is recreated losing its previous content.<br>\nTo avoid this, switch the flag to false:<\/p>\n<p>sequelize.sync({ force: false })<br>\n&#8230;<\/p>\n<p>Check the commented code to take advantage of additional features, uncommenting the chunks to check how it works.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Check_To_The_Datase_And_Check_The_Instance_Created\"><\/span>Check To The Datase And Check The Instance Created<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Connect to the database using a tool.<br>\nIn this tutorial I am using DBeaver.<\/p>\n<p>&nbsp;<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6884\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_04.jpg\" alt width=\"368\" height=\"363\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_04.jpg 368w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_04-300x296.jpg 300w\" sizes=\"(max-width: 368px) 100vw, 368px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6884 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20368%20363%22%3E%3C%2Fsvg%3E\" alt width=\"368\" height=\"363\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20368%20363%22%3E%3C%2Fsvg%3E 368w\" sizes=\"(max-width: 368px) 100vw, 368px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_04.jpg 368w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_04-300x296.jpg 300w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_04.jpg\"><\/p>\n<p>Notice the red arrows. Those fields were created by sequelize.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Running_Again_Using_createDB_turned_to_false\"><\/span>Running Again Using createDB turned to false<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Stop the app (Ctrl+C).<\/p>\n<p>Go to your code and switch to false the recreateDB var.<br>\nvar recreateDb = false;<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6881\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_03.jpg\" alt width=\"586\" height=\"200\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_03.jpg 586w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_03-300x102.jpg 300w\" sizes=\"(max-width: 586px) 100vw, 586px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6881 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20586%20200%22%3E%3C%2Fsvg%3E\" alt width=\"586\" height=\"200\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20586%20200%22%3E%3C%2Fsvg%3E 586w\" sizes=\"(max-width: 586px) 100vw, 586px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_03.jpg 586w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_03-300x102.jpg 300w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_03.jpg\"><\/p>\n<p>&nbsp;<\/p>\n<p>The server&#8217;s output:<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6885\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05.jpg\" alt width=\"1901\" height=\"407\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05.jpg 1901w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05-300x64.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05-768x164.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05-1536x329.jpg 1536w\" sizes=\"(max-width: 1901px) 100vw, 1901px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6885 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201901%20407%22%3E%3C%2Fsvg%3E\" alt width=\"1901\" height=\"407\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201901%20407%22%3E%3C%2Fsvg%3E 1901w\" sizes=\"(max-width: 1901px) 100vw, 1901px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05.jpg 1901w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05-300x64.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05-768x164.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05-1536x329.jpg 1536w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_05.jpg\"><\/p>\n<h3><\/h3>\n<h3><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"Inserting_Data\"><\/span>Inserting Data<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Append the code below right after the last one and always before the modules.export.<\/p>\n<pre class>User.create({\n  username: 'John Doe',\n  password: 'secret'\n}).then(function (user) {\n  console.log('[INFO]: John Doe persisted');\n  \/\/console.log(User)\n})\n\n<\/pre>\n<p>The server&#8217;s output:<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6886\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06.jpg\" alt width=\"1902\" height=\"392\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06.jpg 1902w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06-300x62.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06-768x158.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06-1536x317.jpg 1536w\" sizes=\"(max-width: 1902px) 100vw, 1902px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6886 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201902%20392%22%3E%3C%2Fsvg%3E\" alt width=\"1902\" height=\"392\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201902%20392%22%3E%3C%2Fsvg%3E 1902w\" sizes=\"(max-width: 1902px) 100vw, 1902px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06.jpg 1902w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06-300x62.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06-768x158.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06-1536x317.jpg 1536w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_06.jpg\"><\/p>\n<p>&nbsp;<\/p>\n<p>Go to the database and check if the instance was created.<\/p>\n<p>&nbsp;<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6887\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07.jpg\" alt width=\"1013\" height=\"541\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07.jpg 1013w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07-300x160.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07-750x400.jpg 750w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07-768x410.jpg 768w\" sizes=\"(max-width: 1013px) 100vw, 1013px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6887 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201013%20541%22%3E%3C%2Fsvg%3E\" alt width=\"1013\" height=\"541\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201013%20541%22%3E%3C%2Fsvg%3E 1013w\" sizes=\"(max-width: 1013px) 100vw, 1013px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07.jpg 1013w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07-300x160.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07-750x400.jpg 750w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07-768x410.jpg 768w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_07.jpg\"><\/p>\n<p>&nbsp;<\/p>\n<p>Ok! Success.<br>\nAgain. Stop the service to modify it.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Find_An_Instance_By_Primary_Key\"><\/span>Find An Instance By Primary Key<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Again, stop the service (Ctrl+C).<br>\nComment the table that creates a user or modiffy its data, as you wish.<\/p>\n<p>Append the follwing snippet before the modules.export statement (module.exports = app;).<\/p>\n<pre class>  User.findByPk(1).then(function (user) {\n    console.log('------------------------------------------');\n    console.log('&gt;findByPk(1):');\n    console.log('n\\[INFO]: ' + user.id + \", \" + user.username + '\\n');\n  });\n\n<\/pre>\n<p>I preferred to modify the data to create one more instance (Mary Doe).<\/p>\n<pre class><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6896\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_08-1.jpg\" alt width=\"610\" height=\"655\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_08-1.jpg 610w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_08-1-279x300.jpg 279w\" sizes=\"(max-width: 610px) 100vw, 610px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6896 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20610%20655%22%3E%3C%2Fsvg%3E\" alt width=\"610\" height=\"655\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20610%20655%22%3E%3C%2Fsvg%3E 610w\" sizes=\"(max-width: 610px) 100vw, 610px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_08-1.jpg 610w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_08-1-279x300.jpg 279w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_08-1.jpg\">\n\n\nThe server's output:\n     \n<\/pre>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6893\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09.jpg\" alt width=\"1902\" height=\"569\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09.jpg 1902w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09-300x90.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09-768x230.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09-1536x460.jpg 1536w\" sizes=\"(max-width: 1902px) 100vw, 1902px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6893 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201902%20569%22%3E%3C%2Fsvg%3E\" alt width=\"1902\" height=\"569\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201902%20569%22%3E%3C%2Fsvg%3E 1902w\" sizes=\"(max-width: 1902px) 100vw, 1902px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09.jpg 1902w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09-300x90.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09-768x230.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09-1536x460.jpg 1536w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_09.jpg\"><\/p>\n<p>&nbsp;<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6894\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_10.jpg\" alt width=\"618\" height=\"201\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_10.jpg 618w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_10-300x98.jpg 300w\" sizes=\"(max-width: 618px) 100vw, 618px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6894 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20618%20201%22%3E%3C%2Fsvg%3E\" alt width=\"618\" height=\"201\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20618%20201%22%3E%3C%2Fsvg%3E 618w\" sizes=\"(max-width: 618px) 100vw, 618px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_10.jpg 618w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_10-300x98.jpg 300w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_10.jpg\"><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Find_by_Users_name\"><\/span>Find by User&#8217;s name<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Stop the server and comment the previous code, and append the next (below):<\/p>\n<pre class>\/\/ find by username\nconst users = User.findAll({\n  where: {\n    username: 'John Doe'\n  }\n}).then(function (data, err) {\n  if(!data) {\n    console.log('------------------------------------------');\n    console.log('[FAIL]: user instance not found due to: ' + err);  \n    console.log('------------------------------------------');\n  } else {\n    console.log('------------------------------------------');\n    console.log('[SUCCESS]: instance found: ');  \n    for (u of data) {\n      console.log(u.dataValues);\n      console.log('\\n&gt;FULL CONTENT ------------------------------------------');\n      console.log(u);  \n    }\n  }\n})\n\nRun the server:<\/pre>\n<p>run.bat<\/p>\n<p>&nbsp;<\/p>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6899\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12.jpg\" alt width=\"1901\" height=\"999\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12.jpg 1901w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12-300x158.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12-768x404.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12-1536x807.jpg 1536w\" sizes=\"(max-width: 1901px) 100vw, 1901px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6899 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201901%20999%22%3E%3C%2Fsvg%3E\" alt width=\"1901\" height=\"999\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201901%20999%22%3E%3C%2Fsvg%3E 1901w\" sizes=\"(max-width: 1901px) 100vw, 1901px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12.jpg 1901w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12-300x158.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12-768x404.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12-1536x807.jpg 1536w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_12.jpg\"><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"List_All_Instances\"><\/span>List All Instances<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div>\n<p>Again, stop the service (Ctrl+C).<br>\nComment the code used in the previous step and append this new one, then run again.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<pre class>\/\/ find all\nconst list = User.findAll().then(function (data, err) {\n  if(!data) {\n    console.log('------------------------------------------');\n    console.log('[FAIL]: user instance not found due to: ' + err);  \n    console.log('------------------------------------------');\n  } else {\n    console.log('------------------------------------------');\n    console.log('[SUCCESS]: instance found: ');  \n    for (u of data) {\n      console.log(u.dataValues);\n      console.log('\\n&gt;FULL CONTENT ------------------------------------------');\n      console.log(u);  \n    }\n  }\n})\n\n<\/pre>\n<p><noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6898\" src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11.jpg\" alt width=\"1902\" height=\"961\" srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11.jpg 1902w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11-300x152.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11-768x388.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11-1536x776.jpg 1536w\" sizes=\"(max-width: 1902px) 100vw, 1902px\"><\/noscript><img decoding=\"async\" class=\"alignnone size-full wp-image-6898 lazyload\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201902%20961%22%3E%3C%2Fsvg%3E\" alt width=\"1902\" height=\"961\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201902%20961%22%3E%3C%2Fsvg%3E 1902w\" sizes=\"(max-width: 1902px) 100vw, 1902px\" data-srcset=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11.jpg 1902w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11-300x152.jpg 300w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11-768x388.jpg 768w, https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11-1536x776.jpg 1536w\" data-src=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/node_sequelize_ultering_ml40643_11.jpg\"><\/p>\n<h2><\/h2>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"PART7_%E2%80%93_EXTRA_Going_further%E2%80%A6\"><\/span>PART7 &#8211; EXTRA: Going further&#8230;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Additional links to increase your knowledge:<\/p>\n<p><a href=\"https:\/\/sequelize.readthedocs.io\/en\/rtd\/articles\/getting-started\/\">sequelize.readthedocs.io\/en\/rtd\/articles\/getting-started\/<\/a><br>\n<a href=\"https:\/\/sequelize.readthedocs.io\/en\/rtd\/docs\/models\/\">sequelize.readthedocs.io\/en\/rtd\/docs\/models\/<\/a><br>\n<a href=\"https:\/\/sequelize.org\/master\/class\/lib\/model.js~Model.html\">sequelize.org\/master\/class\/lib\/model.js~Model.html<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"PART8_%E2%80%93_DATABASE_CONNECTION_SETUP_%E2%80%93_DETAILS\"><\/span>PART8 &#8211; DATABASE CONNECTION SETUP &#8211; DETAILS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"OPTION_1_%E2%80%93_Using_cloud_service\"><\/span>OPTION #1 &#8211; Using cloud service<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>If you don&#8217;t wish to install PostgreSQL on your machine or server, you may use a cloud service.<br>\nIf not, please skip this section and go to &#8220;option 2&#8221;.<\/p>\n<p><a href=\"https:\/\/www.elephantsql.com\">ElephantSQL<\/a>&nbsp; is PostgreSQL as a service and it is an easy and fast alternative to set a database instance.<\/p>\n<p>Insert the code ( below) that is responsible for the connection with the database instance between the placeholders ( <em>&#8220;\/\/ PLACEHOLDER FOR&#8230;&#8221;<\/em>), before &#8220;module.exports = app;&#8221;.<\/p>\n<pre>var Sequelize = require('sequelize')\n  , sequelize = new Sequelize({\n    username: \"username\",\n    password: \"secret\",\n    database: \"usename\",\n    host: \"xxx.elephantsql.com\",\n    port: 5432,\n    dialect: \"postgres\"\n});\n<\/pre>\n<p>Alternatively, you may replace app.js from the downloaded code with this file &#8220;<a href=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/2020\/03\/app_elephantsql.7z\">app_elephantsql.7z&#8221;<\/a>.<\/p>\n<h3>&nbsp;OPTION #2 &#8211; Using local database Instance<\/h3>\n<p>If using local PostgreSQL instance, the Sequelize configuration follows below instead of that shown in &#8220;option 1&#8221;.<br>\nEdit app.js file and set the code responsible for the connection with the database instance between the placeholders that begins at &#8220;<span style=\"font-size: 10pt;\">\/\/ PLACEHOLDER FOR SEQUELIZE&#8217;S CODE&#8221; and ends<\/span> before &#8220;module.exports = app;&#8221;.<\/p>\n<pre><\/pre>\n<pre class>LOCAL DATABASE \nvar Sequelize = require('sequelize'),\n  sequelize = new Sequelize({\n    username: \"postgres\",\n    password: \"postgres\",\n    database: \"rin544_dev\",\n    host: \"localhost\",\n    port: 5432,\n    dialect: \"postgres\"\n  });\n\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Assuming that you have PostgreSQL installed, go to the project&#8217;s root dir and run the commands below to create the database instance.<\/p>\n<p>createdb -O postgres -Upostgres rin544_dev<\/p>\n<p>&#8211; Checking:<br>\npsql -Upostgres -W<br>\n\\l<\/p>\n<p>&#8211; If using MariaDB or MySQL, do:<br>\nmysqladmin -uroot -pmysql create rin544_dev<\/p>\n<p>&#8211; Checking:<br>\nmysql -uroot -p<br>\nshow databases;<\/p>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"SOURCE_CODE\"><\/span>SOURCE CODE<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"https:\/\/ultering.com\/it4us\/wp-content\/uploads\/app.7z\">app.js<\/a><br>\n<strong><br>\nSource code to download using&nbsp; Node.js v.16: GitHub, <a href=\"https:\/\/github.com\/alsdias\/node_sequelize_ultering_ml40643_1st_step\">node_sequelize_ultering_ml40643_1st_step<\/a><br>\n<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/ultering.com\/it4us\/?p=2010\"><span style=\"font-size: 16pt;\"><strong>Next<\/strong><\/span><\/a><\/p>\n<p><strong>INDEX<\/strong>:<br>\n<a href=\"https:\/\/ultering.com\/it4us\/?p=2729\">NODE.JS: SEQUELIZE SERIES<\/a><\/p>\n<p>&nbsp;<\/p>\n<div style=\"margin-top: 50px;\">&nbsp;<\/div>\n<p>&nbsp;<\/p>\n<!--CusAds0-->\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>Revision 2022 TARGET Learn Sequelize constructing a project using Node.js, Express, Sequelize for persistence using PostgreSQL, MariaDB (MySQL) or another database. Source code to download using&nbsp; Node.js v.16: GitHub, node_sequelize_ultering_ml40643_1st_step Project developed using Node.js version 16. Node: 16.13.1 Package Manager: npm 8.5.4 OS: win32 x64 (Windows 10) &nbsp; SUPER FAST START USING THE CODE FROM &#8230; <a href=\"https:\/\/ultering.com\/it4us\/?p=1953\" class=\"more-link\">Read More<span class=\"screen-reader-text\"> &#8220;NODE.JS: USING SEQUELIZE &#8211; EXPRESS PROJECT 1: SUPER SIMPLE PROJECT FOR BEGINNERS &#8211; 1ST STEP&#8221;<\/span> &raquo;<\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[17,26],"tags":[103,102],"class_list":["post-1953","post","type-post","status-publish","format-standard","hentry","category-database","category-javascript","tag-node-js","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=\/wp\/v2\/posts\/1953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1953"}],"version-history":[{"count":6,"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=\/wp\/v2\/posts\/1953\/revisions"}],"predecessor-version":[{"id":7111,"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=\/wp\/v2\/posts\/1953\/revisions\/7111"}],"wp:attachment":[{"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ultering.com\/it4us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}