Search This Blog

2026/04/16

Express typescript,typeorm & multer

npm install express
npm install -D typescript ts-node nodemon @types/node @types/express
npx tsc --init
mkdir src
npm install dotenv
npm install typeorm reflect-metadata mysql2
npm install -D @types/node
npm install multer
npm install -D @types/multer
npm run dev


create directory public/upload
in src create config,routes,enity folder

inside config\data-ssource.ts

            import "reflect-metadata";
            import { DataSource } from "typeorm";
            import { User } from "../entity/User";

            export const AppDataSource = new DataSource({
            type: "mysql",
            host: "localhost",
            port: 3306,
            username: "root",
            password: "sangram#81",
            database: "myapp",
            synchronize: true, // auto create tables (dev only)
            logging: false,
            entities: [User],
            });

inside config\multer.ts

            import multer from "multer";
            import path from "path";

            // storage config
            const storage = multer.diskStorage({
            destination: function (_, __, cb) {
                cb(null, path.join(__dirname, "../../public/uploads"));
            },
            filename: function (_, file, cb) {
                const uniqueName = Date.now() + "-" + file.originalname;
                cb(null, uniqueName);
            },
            });

            export const upload = multer({
                storage,
                fileFilter: (_, file, cb) => {
                if (file.mimetype.startsWith("image/")) {
                    cb(null, true);
                } else {
                    cb(new Error("Only images allowed"));
                }
                },
            });

inside tsconfig.json

            {
            "compilerOptions": {
                "target": "ES2020",
                "module": "commonjs",
                "rootDir": "src",
                "outDir": "dist",
                "esModuleInterop": true,
                "strict": true,
                "skipLibCheck": true,
                "experimentalDecorators": true,
                "emitDecoratorMetadata": true
            }
            }

inside package.json

            {
            "dependencies": {
                "dotenv": "^17.4.2",
                "express": "^5.2.1",
                "multer": "^2.1.1",
                "mysql2": "^3.22.0",
                "reflect-metadata": "^0.2.2",
                "typeorm": "^0.3.28"
            },
            "devDependencies": {
                "@types/express": "^5.0.6",
                "@types/multer": "^2.1.0",
                "@types/node": "^25.6.0",
                "nodemon": "^3.1.14",
                "ts-node": "^10.9.2",
                "typescript": "^6.0.2"
            },
            "scripts": {
                "dev": "nodemon --watch src --ext ts --exec \"npx ts-node src/main.ts\"",
                "build": "tsc",
                "start": "node dist/main.js"
            }
            }

inside .env

        PORT=3000
        NODE_ENV=development

inside enity/User.ts

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

        @Entity()
        export class User {
        @PrimaryGeneratedColumn()
        id!: number;

        @Column()
        name!: string;

        @Column()
        email!: string;
        }

This should create user table not users.


inside routes\uploadRoutes.ts

        import { Router } from "express";
        import { upload } from "../config/multer";

        const router = Router();

        // single file upload
        router.post("/", upload.single("file"), (req, res) => {
        if (!req.file) {
            return res.status(400).json({ message: "No file uploaded" });
        }

        return res.json({
            message: "File uploaded",
            file: req.file.filename,
            url: `/uploads/${req.file.filename}`,
        });
        });

        export default router;

inside routes/userRotes.ts

        import { Router } from "express";
        import { AppDataSource } from "../config/data-source";
        import { User } from "../entity/User";
        const router = Router();

        router.get("/", (_, res) => {
        res.json([{ id: 1, name: "Sangram" }]);
        });


        router.get("/account", async (req, res) => {
        const userRepo = AppDataSource.getRepository(User);
        const users = await userRepo.find();
        res.json(users);
        });

        export default router;

src\main.ts

        import express from "express";
        import "dotenv/config";

        const PORT = process.env.PORT || 3000;
        import userRoutes from "./routes/userRoutes";
        import path from "path";
        import "reflect-metadata";
        import { AppDataSource } from "./config/data-source";
        import { User } from "./entity/User";

        const app = express();
        import uploadRoutes from "./routes/uploadRoutes";


        app.use(express.json());
        app.use(express.static(path.join(__dirname, "../public")));
        app.use("/uploads", express.static(path.join(__dirname, "../public/uploads")));

        app.use("/upload", uploadRoutes);
        app.use("/users", userRoutes);

        AppDataSource.initialize()
        .then(() => {
            console.log("DB connected");

            const userRepo = AppDataSource.getRepository(User);

            app.get("/", (_, res) => {
            res.send("API is running 🚀");
            });

            app.get("/account", async (_, res) => {
            const users = await userRepo.find();
            res.json(users);
            });

            app.post("/account", async (req, res) => {
            const user = userRepo.create(req.body);
            const result = await userRepo.save(user);
            res.json(result);
            });

     to compile project from typesscript to javascript run

        npx tsc
then run
        npm start

            app.listen(3000, () => {
            console.log("Server running on http://localhost:3000");
            });
        })
        .catch((err) => console.log("DB error:", err));


to run  project
        npm run dev

Here slight changes are made to use clustering.

2026/04/15

Using Prisma with express.js

First create express app using generator


    npx express-generator --view=ejs myapp

In mysql create a database myapp.

# install npm packages
npm i

# Install Express and Prisma Client
npm install express @prisma/client

# Install Prisma CLI as a dev dependency
npm install prisma --save-dev

# run prism init
npx prisma init

It will create This creates a prisma/ folder with a schema.prisma file and a .env file in your root directory.

in env add database url
    DATABASE_URL="mysql://root:sangram%2381@localhost:3306/myapp"

In schema.prisma you should modify as

        generator client {
         provider = "prisma-client-js"  //other option is typescript specific which may come bydefault
        }

        datasource db {
            provider = "mysql"
            url      = env("DATABASE_URL")
        }

        model users {
            id        Int      @id @default(autoincrement())
            name      String?  @db.VarChar(255)
            email     String?  @unique(map: "email") @db.VarChar(255)
            createdAt DateTime @db.DateTime(0)
            updatedAt DateTime @db.DateTime(0)
        }
# run
    npx prisma migrate dev --name init

    it runs
        npx prisma generate

    create models in js inside prisma folder is node_modules &

# run
    npx prisma db push

    to maake sure table is created

inside user route include prisma client
    const { PrismaClient } = require('@prisma/client');
    const prisma = new PrismaClient();

add route for test as

    router.get('/add-user', async (req, res) => {
        const user = await prisma.users.create({
            data: {
            name: "Sangraam",
            email: "sangram@example.com",
            createdAt: new Date(),
            updatedAt: new Date()
            }
        });
        res.json(user);
    });

#Now run
    npm start

# hit url http://localhost:3000/users/add-user

confirm in mysql entry has been aadded or not.