接上一篇,这里使用 sequelize 来连接 postgresql 数据库

1、安装 sequelize,数据库驱动 pg

yarn add sequelize sequelize-typescript pg reflect-metadata

2、新建配置文件夹 conf 及 配置文件 db.conf.ts

/*** @name: 数据库配置* @param : undefined* @return : undefined*/
export const dbConfig = {host: 'localhost',database: 'demo',dialect: 'postgres',username: 'postgres',password: '123456'
}

3、连接数据库,新建文件夹 db 及 配置文件 db.ts

 1 /*
 2  * @Description: 数据库连接类
 3  */
 4
 5 import * as path from 'path'
 6 import { Sequelize } from 'sequelize-typescript'
 7 import { dbConfig } from '../conf/db.conf'
 8
 9 class DbContext {
10   private sequelize: Sequelize
11   constructor() {
12     const { host, database, dialect, username, password } = dbConfig
13     this.sequelize = new Sequelize({
14       host: host,
15       database: database,
16       dialect: dialect,
17       username: username,
18       password: password,
19       define: {
20         timestamps: true,  //开启时间戳 create_at delete_at update_at
21         paranoid: true,    //开启假删除
22         underscored: true, //下划线
23         charset: 'utf8',
24         freezeTableName: true //固定表名为单数  默认表名是xxxs
25       },
26       pool: {
27         max: 10,
28         min: 0,
29         acquire: 30000,
30         idle: 10000
31       },
32       timezone: '+08:00',
33       modelPaths: [path.resolve(__dirname, `./models`)]
34     })
35     this.sequelize.sync()
36   }
37   init(): Boolean {
38     return !!this.sequelize
39   }
40   getInstance(): Sequelize {
41     return this.sequelize
42   }
43   isInit(): Boolean {
44     return !!this.sequelize
45   }
46 }
47 export const dbContext = new DbContext()

4、数据库实体类,新建文件夹 models 及文件 user.ts

 1 /*
 2  * @Description: 数据库实体类
 3  */
 4
 5 import { Table, Column, Model } from 'sequelize-typescript'
 6
 7 @Table({
 8   tableName: 'user'
 9 })
10 export default class User extends Model<User> {
11   @Column({
12     comment: '自增ID',
13     primaryKey: true,
14     autoIncrement: true,
15   })
16   id: number
17
18   @Column
19   username: string
20
21   @Column
22   password: string
23 }

5、编写业务逻辑接口,在 src 目录下新建文件夹 dao、service,在 dao 目录下新建 UserDao.ts 及子目录  impl,在 service  目录下新建 UserService.ts 及子目录  impl

 1 /*
 2  * @Description: 数据库表操作基础接口 UserDao.ts
 3  */
 4 export interface UserDao {
 5   /**
 6    * @name: 查询
 7    * @param :
 8    * @return : Array<User>
 9    */
10   findAll();
11   /**
12    * @name: 查询
13    * @param :
14    * @return : Array<User>
15    */
16   findByName(username:string);
17   /**
18    * @name: 新增
19    * @param : undefined
20    * @return : undefined
21    */
22   create(entity:UserInfo);
23
24   /**
25    * @name: 删除
26    * @param : undefined
27    * @return : undefined
28    */
29   delete(id:number);
30 }
31 export interface UserInfo {
32   username:string;
33   password:string;
34 }

 1 /*
 2  * @Description: service接口  UserService.ts
 3  * @version:
 4  */
 5
 6 export interface UserService{
 7   /**
 8    * @name: 查询
 9    * @param : undefined
10    * @return : undefined
11    */
12   findAll();
13
14   /**
15    * @name: 查询
16    * @param : undefined
17    * @return : undefined
18    */
19   findByName(username:string);
20
21   /**
22    * @name: 新增
23    * @param : undefined
24    * @return : undefined
25    */
26   create(username:string,password:string);
27
28   /**
29    * @name: 删除
30    * @param : undefined
31    * @return : undefined
32    */
33   delete(id:String);
34 }

6、编写业务逻辑实现类 UserDaoImpl.ts、UserServiceImpl.ts

 1 /*
 2  * @Description: 数据库表操作基础实现类 UserDaoImpl.ts
 3  */
 4
 5 import { dbContext } from '../../db/db'
 6 import { UserDao, UserInfo } from '../UserDao';
 7 import User from '../../db/models/user';
 8
 9 export class UserDaoImpl implements UserDao{
10   constructor(){
11     dbContext.init();
12   }
13   /**
14    * @name: 查询
15    * @param : undefined
16    * @return : undefined
17    */
18   public async findAll(){
19     const results = await User.findAll({
20       raw: true
21     })
22     return results;
23   }
24
25    /**
26    * @name: 查询
27    * @param : undefined
28    * @return : undefined
29    */
30   public async findByName(username:string){
31     const results = await User.findOne({
32       where:{
33         username:username
34       }
35     })
36     return results;
37   }
38
39   /**
40    * @name: 新增
41    * @param : entity
42    * @return : undefined
43    */
44   public async create(entity:UserInfo) {
45     const results = await User.create(entity)
46     return results;
47   }
48
49    /**
50    * @name: 删除
51    * @param : undefined
52    * @return : undefined
53    */
54   public async delete(id: number) {
55     const results = await User.destroy({
56       where:{
57           id:{
58             $eq:id
59           }
60       }
61     });
62     return results;
63   }
64 } 

 1 import { UserService } from "../UserService";
 2 import { UserDao } from "../../dao/UserDao";
 3 import { UserDaoImpl } from "../../dao/impl/UserDaoImpl";
 4
 5 /*
 6  * @Description: service实现类 UserServiceImpl.ts
 7  */
 8
 9
10 export class UserServiceImpl implements UserService{
11   private userDao:UserDao;
12
13   constructor(){
14     this.userDao = new UserDaoImpl();
15   }
16
17   /**
18    * @name: 查询
19    * @param : undefined
20    * @return : undefined
21    */
22   public findAll() {
23     return this.userDao.findAll();
24   }
25   /**
26    * @name: 查询
27    * @param : undefined
28    * @return : undefined
29    */
30   public findByName(username:string) {
31     return this.userDao.findByName(username);
32   }
33   /**
34    * @name: 新增
35    * @param : entity
36    * @return : undefined
37    */
38   public create(username: string, password: string) {
39     return this.userDao.create({username,password});
40   }
41
42   /**
43    * @name: 删除
44    * @param : undefined
45    * @return : undefined
46    */
47   public delete(id: String) {
48     return this.userDao.delete(~~id);
49   }
50
51 } 

7、查看成果,修改 router/index.ts

 1 /*
 2  * @Description: 后台路由组件
 3  * @version: 0.1.0
 4  */
 5 import * as Router from 'koa-router';
 6 import { UserInfo } from '../dao/UserDao';
 7 import { UserService } from '../service/UserService';
 8 import { UserServiceImpl } from '../service/impl/UserServiceImpl';
 9
10 const router = new Router();
11 const userService:UserService =new UserServiceImpl();
12
13 router.get('/*', async (ctx) => {
14   ctx.body = await userService.findAll();
15 })
16
17 export { router }

8、浏览器输入 http://localhost:8080

至此连接数据库完成

目录结构:

转载于:https://www.cnblogs.com/lifefriend/p/10025469.html

typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库...相关推荐

  1. java写一个窗体并连接MySQL_大神帮忙写一个简单地java页面,连接MySQL数据库之后能够显示数据库上的数据...

    展开全部 用jdbc 连接mysql数据库就行了,网上搜下一大把. --记得在classpath下加入mysql 的jdbc驱动包. /** * @author :来e68a84e8a2ad32313 ...

  2. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  3. 一个简单的python日志服务器

    一个简单的python日志服务器,主要目的是搜集各python logging记录的日志,将其简单汇总.源码如下: # -*- coding: utf-8 -*- ''' Created on 201 ...

  4. 《UNP》随笔——“实现一个简单的回射服务器”存在的不足(信号处理)

    尽管实现了一个简单的回射服务器,但依旧存在一些不足: 服务端的子进程结束的时候,由于父进程未对子进程发送的SIGCHLD信号进行处理,会导致子进程进入僵死状态.这一点该如何解决? 客户端A向服务端B发 ...

  5. 自己动手搭建一个简单的静态资源服务器

    文章目录 自己动手搭建一个简单的静态资源服务器 介绍 一.设计到的模块 备注: 二.代码结构 三.具体代码 自己动手搭建一个简单的静态资源服务器 介绍 ​ 通过此文章的学习,可以自己使用NodeJs搭 ...

  6. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  7. 【译】使用python创建一个简单的restful风格的webservice应用

    2019独角兽企业重金招聘Python工程师标准>>> 这是一个如何使用python快速构建简单restful风格webservice的应用教程. 1.分析rest路由规则 rest ...

  8. Linux上利用nginx搭建一个简单的rtmp视频流服务器(不涉及直播)

    文章目录 Linux上利用nginx搭建一个简单的rtmp视频流服务器(不涉及直播) 一.基础环境搭建 二.构建Nginx 下载nginx-rtmp-module 安装Nginx 编译nginx,代理 ...

  9. 一个简单的静态web服务器

    用python的socket写的一个简单多进程服务器 #-*-coding:utf-8-*- import re from socket import * from multiprocessing i ...

最新文章

  1. 用python画烟花-用python做一个烟花show
  2. c语言程序设计的反思,C语言程序设计教学反思.doc
  3. 3.cocos2dx它Menu,由menu为了实现场景切换
  4. oracle apex触发器,triggers - 插入之前/更新Apex触发器之前,测试覆盖率失败 - 堆栈内存溢出...
  5. 学计算机的思维导图,电脑上最好用的6款,思维导图软件测评
  6. 记kali下使用metasploit木马进行远程控制
  7. 项目管理-产品开发流程
  8. python学习之心路历程
  9. 记一次从 git pull 出现 Untracked FilesPervent Merge
  10. angular RxJs
  11. ISO14229 理解(一)
  12. 深度模型框架(持续更新)
  13. 吕爱国倾心讲座:混合方法研究的类型与程序设计
  14. 怎么在视频画面添加图片的方法
  15. 常吃几种蔬菜帮你年轻10岁
  16. 生产制造业ERP系统模块
  17. c语言两千行以内代码,C语言的教务管理系统(2000行代码)(106页)-原创力文档
  18. 第十届河南 ACM 省赛纪事
  19. D3D中2D图片的绘制两种方法
  20. 鉴释×中科院计算所丨OS2ATC 2020精彩回顾

热门文章

  1. JavaWeb开发概念了解
  2. nosql简答什么是最终一致性_最终一致性 – 如何在NoSQL中维护非规范化一致性?...
  3. matlab产生一组均为一的矩阵,在matlab中如何从一组数中得到随机数组成一个n*n的矩阵...
  4. 异星工厂 自动机器人_刚刚,ABB机器人全球最大机器人超级工厂在康桥动工! 投资10亿元,用机器人造机器人...
  5. Leetcode 1. 两数之和 (Python版)
  6. Opencv实战(一) 视频人数统计(C++ Opencv)前后背景分离方法
  7. 关于printf输出 格式化规定符 的
  8. 【实例分割】cvpr2021_Look Closer to Segment Better
  9. 余额宝好日子到头,以后不能随存随取了!
  10. “城迷”:黑白梦与精神逃离