English 中文(简体)
TypeORM with Express
  • 时间:2024-09-17

TypeORM with Express


Previous Page Next Page  

Express is one of the popular JavaScript framework to create web apppcation. Let us learn how to use TypeORM along with express framework in this chapter.

Creating a simple apppcation

TypeORM CLI provides an easy option to create a complete working express web apppcation (Restful API apppcation) integrated with TypeORM. The CLI command to create the apppcation is as follows −


cd /path/to/workspace typeorm init --express --name typeorm-express-sample --database mysql

Above command will create a new web apppcation under typeorm-express-sample folder. The structure of the apppcation is as follows −


│ .gitignore 
│ ormconfig.json 
│ package.json 
│ README.md 
│ tsconfig.json 
│ └───src 
      │ index.ts 
      │ routes.ts 
      │ 
      ├───controller 
      │      UserController.ts 
      │ 
      ├───entity 
      │      User.ts 
      │ 
      └───migration

Here,

As we know, ormconfig.json is the TypeORM configuration file. The code is as follows,


{ 
   "type": "mysql", 
   "host": "localhost", 
   "port": 3306, 
   "username": "test", 
   "password": "test", 
   "database": "test", 
   "synchronize": true, 
   "logging": false, 
   "entities": [
      "src/entity/**/*.ts" 
   ], 
   "migrations": [ "src/migration/**/*.ts" 
   ], 
   "subscribers": [ "src/subscriber/**/*.ts" 
   ], 
   "cp": { 
      "entitiesDir": "src/entity", "migrationsDir": "src/migration", "subscribersDir": "src/subscriber" 
   } 
}

Here, change the database setting to match your local database setting.

package.json file is the main configuration of the apppcation.

tsconfig.json file contains the configuration related to TypeScript.

entity folder contains the TypeORM models. A default User model will be created by CLI and it is as follows −


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

@Entity() 
export class User { 
   
   @PrimaryGeneratedColumn() 
   id: number; 
   
   @Column() 
   firstName: string; 
   
   @Column() 
   lastName: string; 
   
   @Column() 
   age: number; 
}

controller folder contains the express controllers. CLI create a default user API controller with add / pst / delete user details. The code is as follows −


import {getRepository} from "typeorm"; import {NextFunction, Request, Response} from "express"; import {User} from "../entity/User"; 

export class UserController {

   private userRepository = getRepository(User); 
   
   async all(request: Request, response: Response, next: NextFunction) { 
      return this.userRepository.find(); 
   } 
   
   async one(request: Request, response: Response, next: NextFunction) { 
      return this.userRepository.findOne(request.params.id); 
   } 
   
   async save(request: Request, response: Response, next: NextFunction) { 
      return this.userRepository.save(request.body); 
   } 
   
   async remove(request: Request, response: Response, next: NextFunction) { 
      let userToRemove = await this.userRepository.findOne(request.params.id); 
      await this.userRepository.remove(userToRemove); 
   } 
}

Here,

all method is used to fetch all users from the database.

one method is used to fetch a single user from the database using user id

save method is used to save the user information into the database.

delete method is used to delete the user from the database using user id

routes.ts file maps the user controller methods to proper URL and the code is as follows −


import {UserController} from "./controller/UserController"; 

export const Routes = [{ 
      method: "get", 
      route: "/users", 
      controller: UserController, action: "all" 
   }, { 
      method: "get", 
      route: "/users/:id", controller: UserController, action: "one" 
   }, { 
      method: "post", 
      route: "/users", 
      controller: UserController, action: "save" 
   }, { 
      method: "delete", route: "/users/:id", controller: UserController,
      action: "remove" 
}];

Here,

/users url is mapped to user controller. Each verb post, get and delete are mapped to different methods.

Finally, index.ts is our main web apppcation entry point. The source code is as follows −


import "reflect-metadata"; 
import {createConnection} from "typeorm"; 
import * as express from "express"; import * as bodyParser from "body-parser"; 
import {Request, Response} from "express"; 
import {Routes} from "./routes"; import {User} from "./entity/User"; 

createConnection().then(async connection => { 

   // create express app const app = express(); app.use(bodyParser.json()); 

   // register express routes from defined apppcation routes Routes.forEach(route => { 
      (app as any)[route.method](route.route, (req:   Request, res: Response, next: Function) => { 
         const result = (new (route.controller as any))[route.action](req, res, next); 
         if (result instanceof Promise) { 
            result.then(result => result !== null && result !== undefined ? res.send(result) : undefined); 
         } else if (result !== null && result !== undefined) { 
            .json(result); 
         } 
      }); 
   }); 
      
   // setup express app here 
   // ... 
      
   // start express server app.psten(3000); 
      
   // insert new users for test await connection.manager.save(connection.manager.create(User, { 
      firstName: "Timber",
      lastName: "Saw", 
      age: 27 
   }));
   await connection.manager.save(connection.manager.create(User, { 
      firstName: "Phantom", 
      lastName: "Assassin", 
      age: 24 
   })); 
      
   console.log("Express server has started on port 3000. Open http://localhost:3000/users to see results"); 
}).catch(error => console.log(error));

Here, the apppcation configures the routes, insert two users and then start the web apppcation at port 3000. We can access the apppcation at http://localhost:3000

To run the apppcation, follow below steps −

Let us install the necessary packages using below command −


npm install

Output


npm notice created a lockfile as package-lock.json. You should commit this file. 
npm WARN typeorm-express-sample@0.0.1 No repository field. 
npm WARN typeorm-express-sample@0.0.1 No pcense field. 

added 176 packages from 472 contributors and audited 351 packages in 11.965s 

3 packages are looking for funding  run `npm fund` for details 

found 0 vulnerabipties

Run the below command to start the apppcation.


npm start

Output


> typeorm-express-sample@0.0.1 start /path/to/workspace/typeorm-express-sample 
> ts-node src/index.ts 

Express server has started on port 3000. Open http://localhost:3000/users to see results

Let us access our web apppcation API using curl command as below −


curl http://localhost:3000/users

Here,

curl is a command pne apppcation to access web apppcation from command prompt. It supports all the HTTP verbs such as get, post, delete, etc.,

Output


[{"id":1,"firstName":"Timber","lastName":"Saw","age":27},{"id":2,"firstName":"Phantom","lastName":"Assassin","age":24}]

To fetch the first record, we can use below command −


curl http://localhost:3000/users/1

Output


{"id":1,"firstName":"Timber","lastName":"Saw","age":27}

To delete a user record, we can use below command −


curl -X DELETE http://localhost:3000/users/1

As we seen in this chapter, TypeORM can be easily integrated into express apppcation.

Advertisements