DEV Community

Punam Pudasaini
Punam Pudasaini

Posted on

Setting Up a Node.js Development Environment with MySQL, Sequelize, and TypeScript

Why Node.js with MySQL and Sequelize?

Node.js is a powerful backend technology, and MySQL remains a popular relational database for many applications. Pairing it with Sequelize ORM simplifies database interactions, and TypeScript ensures type safety, improving developer productivity and reducing bugs.

Now, let's get hands-on.

Getting Started

Step 1: Setting Up the Project

mkdir node-mysql-sequelize-ts
cd node-mysql-sequelize-ts
npm init -y

Enter fullscreen mode Exit fullscreen mode

Step 2: Install Dependencies

Install the required packages:

npm install express sequelize mysql2
npm install --save-dev typescript @types/node @types/express ts-node nodemon

Enter fullscreen mode Exit fullscreen mode

Step 3: Configure TypeScript

Generate a tsconfig.json:

tsc --init
Enter fullscreen mode Exit fullscreen mode

Update the configuration:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "CommonJS",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true
  }
}

Enter fullscreen mode Exit fullscreen mode

Step 4: Setting Up Sequelize

Create a src/config/database.ts file:

import { Sequelize } from "sequelize";

const sequelize = new Sequelize("database_name", "username", "password", {
  host: "localhost",
  dialect: "mysql",
});

export default sequelize;

Enter fullscreen mode Exit fullscreen mode

Step 5: Model Definition

Create src/models/User.ts:

import { DataTypes, Model } from "sequelize";
import sequelize from "../config/database";

class User extends Model {}

User.init(
  {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      primaryKey: true,
    },
    name: {
      type: DataTypes.STRING,
      allowNull: false,
    },
    email: {
      type: DataTypes.STRING,
      allowNull: false,
      unique: true,
    },
  },
  {
    sequelize,
    tableName: "users",
  }
);

export default User;

Enter fullscreen mode Exit fullscreen mode

Step 6: Connecting Sequelize with the App

Database Sync
In src/index.ts, synchronize Sequelize models:

import sequelize from "./config/database";
import User from "./models/User";

const start = async () => {
  try {
    await sequelize.sync({ force: true }); // Creates tables
    console.log("Database synchronized!");
  } catch (error) {
    console.error("Error syncing database:", error);
  }
};

start();

Enter fullscreen mode Exit fullscreen mode

*Step 6: Testing the Setup *

Add a Basic Route
Update src/index.ts to include a test route:

import express, { Request, Response } from "express";
import sequelize from "./config/database";
import User from "./models/User";

const app = express();
const port = 3000;

app.get("/", async (req: Request, res: Response) => {
  try {
    const users = await User.findAll();
    res.json(users);
  } catch (error) {
    res.status(500).send("Database error");
  }
});

app.listen(port, async () => {
  console.log(`Server running on http://localhost:${port}`);
  await sequelize.authenticate();
});

Enter fullscreen mode Exit fullscreen mode

Start the development server:

npm run dev

Enter fullscreen mode Exit fullscreen mode

Top comments (1)

Collapse
 
tesgbro profile image
Rojan Dhimal

Please add Create, Update and Delete api for more detail insight. Thank you for sharing.