{"id":8024,"date":"2024-07-13T21:17:35","date_gmt":"2024-07-13T15:47:35","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=8024"},"modified":"2024-09-25T16:54:47","modified_gmt":"2024-09-25T11:24:47","slug":"building-a-project-with-nodejs-typescript-express-graphql-and-mongodb","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/building-a-project-with-nodejs-typescript-express-graphql-and-mongodb\/","title":{"rendered":"1. Building a  Project with NodeJs, Typescript, Express, GraphQL  and MongoDB"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><u>Creating Node project with Express, MongoDB, Typescript &amp; GraphQL <\/u><\/strong>involves several steps. Lets discuss them in detail as follows:<br><strong>Prerequisites:<\/strong><br>Before getting into the steps to create a node project, let&#8217;s make sure the system is installed with node , VS Code, and Mongo DB softwares.<strong><u><br><\/u><br>Step 1 : Create the server folder and navigate into it.<br><\/strong>mkdir server<br>cd server<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 2: Initialize the project<br><\/strong>yarn init -y<strong><br><br>Step-3 : Install all packages with typescript dependencies<br><\/strong>yarn add express graphql express-graphql mongoose dotenv mongodb cors<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">yarn add typescript ts-node @types\/node @types\/express @types\/graphql @types\/mongoose @types\/dotenv&nbsp; @types\/mongodb -D<br><br><strong>Step 4: Setup config.ts file in the project root folder:<br><\/strong>{<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &#8220;compilerOptions&#8221;: {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;target&#8221;: &#8220;ES6&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;module&#8221;: &#8220;commonjs&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;strict&#8221;: true,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;esModuleInterop&#8221;: true,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;skipLibCheck&#8221;: true,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;forceConsistentCasingInFileNames&#8221;: true,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;outDir&#8221;: &#8220;.\/dist&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;rootDir&#8221;: &#8220;.\/src&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; },<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &#8220;include&#8221;: [&#8220;src&#8221;],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &#8220;exclude&#8221;: [&#8220;node_modules&#8221;]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<br><br><br><strong>Step 5: Setup .env file in the project root folder<br><\/strong>MONGO_URI=mongodb:\/\/localhost:27017\/mydatabase<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PORT=4000<br><br><strong>Step 6: Create folders &amp; files under the project root<br><\/strong>mkdir src<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">touch src\/index.ts src\/database.ts src\/schema.ts src\/models\/User.ts<br><br><strong>Step 7: create database.ts file for DB connection<br><br><\/strong>import express from 'express';<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">import dotenv from 'dotenv';<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">import connectDB from '.\/database';<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">dotenv.config();<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">const app = express();<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">const port = process.env.PORT || 4000;<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">connectDB();<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">app.listen(port, () =&gt; {<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">&nbsp; console.log(`Server is running at http:\/\/localhost:${port}\/graphql`);<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">});<br><br><strong>Step 8: Update package.json<\/strong><br><br>\u00a0 \"scripts\": {<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;start&#8221;: &#8220;nodemon &#8211;exec ts-node src\/index.ts&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;build&#8221;: &#8220;tsc&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp; &#8220;test&#8221;: &#8220;jest&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a0 },<br><strong>Step 9:  Create models, schemas, resolvers and update them in index.ts file:<br><\/strong>import express from &#8220;express&#8221;;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import dotenv from &#8220;dotenv&#8221;;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import connectDB from &#8220;.\/databse&#8221;;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import { ApolloServer } from &#8220;apollo-server-express&#8221;;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import usertypeDefs from &#8220;.\/schema\/userschema&#8221;;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import userresolvers from &#8220;.\/resolvers\/userResolvers&#8221;;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">import UserModel from &#8220;.\/models\/usermodel&#8221;;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">dotenv.config();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">connectDB();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">const startServer = async () =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; const app = express();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; const server = new ApolloServer({<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; typeDefs: [usertypeDefs],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; resolvers: [userresolvers],<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; context: {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; &nbsp; UserModel,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; },<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; });<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; await server.start();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; server.applyMiddleware({ app });<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; var PORT = process.env.PORT;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; app.listen(PORT, () =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; &nbsp; console.log(`Server running at http:\/\/localhost:${PORT}`);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp; });<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">};<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">startServer();<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step 10:<\/strong> <strong>Run the project<br><\/strong>yarn start<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hence, the project gets started and we could see the mongodb connection and server running on port in the console message.<strong><br><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Creating Node project with Express, MongoDB, Typescript &amp; GraphQL involves several steps. Lets discuss them in detail as follows:Prerequisites:Before getting [&hellip;]<\/p>\n","protected":false},"author":503,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1022],"tags":[],"class_list":["post-8024","post","type-post","status-publish","format-standard","hentry","category-web-architecture","psol-cat-web-architecture"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-25q","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/8024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/503"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=8024"}],"version-history":[{"count":0,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/8024\/revisions"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=8024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=8024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=8024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}