Node.js Application Setup Procedure
Table of contents
Find the Github Repo here
Project Setup
Download and install node from https://nodejs.org/en/download/. This will also install npm which is a package manager for node.
Open a new terminal on your machine or from your code editor of choice and change directory (cd) to your workspace.
Create a new directory that is the name of your project and cd into the newly created project directory
Create the package.json file for the project: do
npm init
. This will ask for some details, but they're all optionalNow install express next. simply do
npm i express
Next, we need to install babel. Babel is a Javascript compiler that compiles the latest Javascript syntaxes for the browser to understand. To install babel run
npm i --save-dev @babel/core @babe/cli @babel/node @babel/preset-env
we are saving it to dev because it is a dev dependencyNext, install nodemon and body-parser. do
npm i nodemon body-parser
When the installation of babel and nodemon is done, open your project in the editor. In the root project, create a file called
.babelrc
, inside this file, you will create an object and pass the presets. You will have something like this:{ "presets": [ "@babel/preset-env" ] }
Your project setup is complete.
Initial Server Setup
Change the script in package.json
file so that nodemon picks the index file when the npm start
command is executed set it to:
"scripts": {
"start": "nodemon ./index.js --exec babel-node"
},
Next, we need to create the index.js file which is the main entry point of the application. Open the created file and type the following:
import express from "express";
const app = express(); const PORT = 3000;
app.get('/', (req, res) => res.send(Node and express server is running on port ${PORT}) );
app.listen(PORT, () => console.log(Your server is running on port ${PORT}) );
first line imports express from the express package, the second line assigns a variable to the express server, the third line defines a port the server should run on. This can be any free port on your machine. The fourth line defines a default route we can call on our browser or any other client like postman just to test whether the express server is running when it is started with npm start
command. The fifth line is a console message to show our application server is running.
File Structure
In the root of your project, create an src directory. Inside this directory, create three directories, controllers, models and routes respectively.
controller
This directory holds the controllers for all the objects in your application.
model
This is where the database models for your application reside
routes
Here, all the URL routes in your application are defined.
Database Setup
MongoDB Setup
Go to https://www.mongodb.com/ and under the products tab, click on community server and proceed to download
Install mongoose: Mongoose is a node.js library for MongoDB database. run
npm install mongoose
Go to the index.js file and setup the mongoose connection as well as the body-parser
//mongoose connection mongoose.set('strictQuery', true); mongoose.Promise = global.Promise; mongoose.connect('mongodb://127.0.0.1/walletdb', { useNewUrlParser: true }); //bodyparser setup app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());
Create a walletMode.js file in your project's models directory. In this file, you will define the object model (account model for this example)
import mongoose from "mongoose";
const Schema = mongoose.Schema;
export const AccountSchema = new Schema({
firstName: {
type: String,
required: 'enter firstname'
},
lastName: {
type: String,
required: 'enter lastname'
},
email: {
type: String
},
phone: {
type: Number
},
created_date: {
type: Date,
default: Date.now()
}
});
Finally, create a walletController.js file in the controllers directory. Functions to do CRUD operations will be implemented here.
import mongoose from "mongoose"; import { AccountSchema } from "../models/walletModel"; const Account = mongoose.model('Account', AccountSchema); export const addNewAccount = (req, res) => { let newAccount = new Account(req.body); newAccount.save((err, account) => { if(err){ res.send(err) } res.json(account) }); }; export const getAllAccounts = (req, res) => { Account.find({}, (err, account) => { if(err){ res.send(err) } res.json(account) }); }; export const getAccountById = (req, res) => { Account.findById(req.params.accountId, (err, account) => { if(err){ res.send(err) } res.json(account) }); }; export const updateAccountById = (req, res) => { Account.findOneAndUpdate({ _id: req.params.accountId}, req.body, { new: true }, (err, account) => { if(err){ res.send(err) } res.json(account) }); }; export const deleteAccountById = (req, res) => { Account.remove({ _id: req.params.accountId}, (err) => { if(err){ res.send(err) } res.json({message: 'successfully deleted account'}) }); };
Github Repo: https://github.com/Nate-Agbara/wallet-system.git