Looking for the frontend React project? Click here.
Source - https://github.com/bdcorps/node-backend-typescript-prisma
Create a new Node.js project by:
mkdir saasbase-be
cd saasbase-be
npm init --yes
npm i typescript ts-node dotenv cors express
npm i -D ts-node-dev @types/node @types/express @types/cors
Add a new file called src/index.ts
that will serve our Express server:
import express, { Application, Request, Response } from "express";
import bodyParser from "body-parser";
const app: Application = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get("/", (req: Request, res: Response) => {
res.send("Healthy");
});
const PORT = process.env.PORT || 8000;
app.listen(PORT, () => {
console.log(`Server is running on PORT ${PORT}`);
});
Create a tsconfig.json
:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"outDir": "dist",
"rootDir": "src",
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true
},
"exclude": ["node_modules"]
}
Update package.json
with:
"scripts": {
"dev": "ts-node-dev index.ts",
"build": "tsc",
"start": "node dist"
}
Run with:
npm run dev
This will run in Dev mode.
To compile and run a Production build:
npm run build
npm start
Make sure you have a .gitignore
:
/node_modules
.env*
Add dotenv
to the very top of the src/index.ts
file:
import * as dotenv from "dotenv";
dotenv.config();
...
console.log(process.env.SECRET_CODE);
Create a .env
:
SECRET_CODE=1234
You can see the server print out the SECRET_CODE
when you run the app.
Add CORS in index.ts
:
import cors from 'cors';
...
# if you want anyone to be able to connect
app.use(cors({ origin: true }))
# if you want only your frontend to connect
app.use(cors({ origin: "http://localhost:3000" }))
Make sure to add to .gitignore:
.env
node_modules
``
## Step 5: Deploy to Heroku
Download Heroku CLI from [here](https://devcenter.heroku.com/articles/heroku-cli).
```bash
git init
git add .
git commit -am "first commit"
heroku apps:create saasbase-be
heroku git:remote -a saasbase-be
git push heroku master
heroku open
If you're deploying to Production, continue on.
FROM node:16 AS builder
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . ./
RUN npm run build
FROM nginx:1.19.0
WORKDIR /usr/share/nginx/html
RUN rm -rf ./*
COPY --from=builder /app/dist .
ENTRYPOINT ["nginx", "-g", "daemon off;"]
docker build -t saasbase-be . --platform linux/amd64 # make sure the build is for correct platform
docker run -p 8000:8000 -d saasbase-be
To create a repository:
sssaini/saasbase-be
docker login
docker tag saasbase-be sssaini/saasbase-be:0.1
docker push sssaini/saasbase-be:0.1