接上一篇,这里使用 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

 /*
* @Description: 数据库连接类
*/ import * as path from 'path'
import { Sequelize } from 'sequelize-typescript'
import { dbConfig } from '../conf/db.conf' class DbContext {
private sequelize: Sequelize
constructor() {
const { host, database, dialect, username, password } = dbConfig
this.sequelize = new Sequelize({
host: host,
database: database,
dialect: dialect,
username: username,
password: password,
define: {
timestamps: true, //开启时间戳 create_at delete_at update_at
paranoid: true, //开启假删除
underscored: true, //下划线
charset: 'utf8',
freezeTableName: true //固定表名为单数 默认表名是xxxs
},
pool: {
max: 10,
min: 0,
acquire: 30000,
idle: 10000
},
timezone: '+08:00',
modelPaths: [path.resolve(__dirname, `./models`)]
})
this.sequelize.sync()
}
init(): Boolean {
return !!this.sequelize
}
getInstance(): Sequelize {
return this.sequelize
}
isInit(): Boolean {
return !!this.sequelize
}
}
export const dbContext = new DbContext()

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

 /*
* @Description: 数据库实体类
*/ import { Table, Column, Model } from 'sequelize-typescript' @Table({
tableName: 'user'
})
export default class User extends Model<User> {
@Column({
comment: '自增ID',
primaryKey: true,
autoIncrement: true,
})
id: number @Column
username: string @Column
password: string
}

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

 /*
* @Description: 数据库表操作基础接口 UserDao.ts
*/
export interface UserDao {
/**
* @name: 查询
* @param :
* @return : Array<User>
*/
findAll();
/**
* @name: 查询
* @param :
* @return : Array<User>
*/
findByName(username:string);
/**
* @name: 新增
* @param : undefined
* @return : undefined
*/
create(entity:UserInfo); /**
* @name: 删除
* @param : undefined
* @return : undefined
*/
delete(id:number);
}
export interface UserInfo {
username:string;
password:string;
}
 /*
* @Description: service接口 UserService.ts
* @version:
*/ export interface UserService{
/**
* @name: 查询
* @param : undefined
* @return : undefined
*/
findAll(); /**
* @name: 查询
* @param : undefined
* @return : undefined
*/
findByName(username:string); /**
* @name: 新增
* @param : undefined
* @return : undefined
*/
create(username:string,password:string); /**
* @name: 删除
* @param : undefined
* @return : undefined
*/
delete(id:String);
}

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

 /*
* @Description: 数据库表操作基础实现类 UserDaoImpl.ts
*/ import { dbContext } from '../../db/db'
import { UserDao, UserInfo } from '../UserDao';
import User from '../../db/models/user'; export class UserDaoImpl implements UserDao{
constructor(){
dbContext.init();
}
/**
* @name: 查询
* @param : undefined
* @return : undefined
*/
public async findAll(){
const results = await User.findAll({
raw: true
})
return results;
} /**
* @name: 查询
* @param : undefined
* @return : undefined
*/
public async findByName(username:string){
const results = await User.findOne({
where:{
username:username
}
})
return results;
} /**
* @name: 新增
* @param : entity
* @return : undefined
*/
public async create(entity:UserInfo) {
const results = await User.create(entity)
return results;
} /**
* @name: 删除
* @param : undefined
* @return : undefined
*/
public async delete(id: number) {
const results = await User.destroy({
where:{
id:{
$eq:id
}
}
});
return results;
}
}
 import { UserService } from "../UserService";
import { UserDao } from "../../dao/UserDao";
import { UserDaoImpl } from "../../dao/impl/UserDaoImpl"; /*
* @Description: service实现类 UserServiceImpl.ts
*/ export class UserServiceImpl implements UserService{
private userDao:UserDao; constructor(){
this.userDao = new UserDaoImpl();
} /**
* @name: 查询
* @param : undefined
* @return : undefined
*/
public findAll() {
return this.userDao.findAll();
}
/**
* @name: 查询
* @param : undefined
* @return : undefined
*/
public findByName(username:string) {
return this.userDao.findByName(username);
}
/**
* @name: 新增
* @param : entity
* @return : undefined
*/
public create(username: string, password: string) {
return this.userDao.create({username,password});
} /**
* @name: 删除
* @param : undefined
* @return : undefined
*/
public delete(id: String) {
return this.userDao.delete(~~id);
} }

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

 /*
* @Description: 后台路由组件
* @version: 0.1.0
*/
import * as Router from 'koa-router';
import { UserInfo } from '../dao/UserDao';
import { UserService } from '../service/UserService';
import { UserServiceImpl } from '../service/impl/UserServiceImpl'; const router = new Router();
const userService:UserService =new UserServiceImpl(); router.get('/*', async (ctx) => {
ctx.body = await userService.findAll();
}) export { router }

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

至此连接数据库完成

目录结构:

typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库的更多相关文章

  1. typescript-koa-postgresql 实现一个简单的rest风格服务器 —— typescript 开发环境配置

    最近需要用 nodeJS 写一个后台程序,为了能够获得 IDE 的更多代码提示,决定用 typescript 来编写,随便也学习下 ts,在这记录下实现过程. 1.新建文件夹 typescript-k ...

  2. typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 集成 koa

    接上文 1.安装 koa yarn add koa koa-router koa-static yarn add @types/koa @types/koa-router @types/koa-sta ...

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

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

  4. 使用webpy创建一个简单的restful风格的webservice应用

    下载:wget http://webpy.org/static/web.py-0.38.tar.gz解压并进入web.py-0.38文件夹安装:easy_install web.py 这是一个如何使用 ...

  5. Golang学习-第二篇 搭建一个简单的Go Web服务器

    序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...

  6. nodeJS搭建一个简单的(代理)web服务器

    前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理.最近在用vuejs,发现webpack-dev-server的代理简单好用.于是仿照写了一个简单的web服务器,用于非webpack的项 ...

  7. golang 创建一个简单的广播echo服务器

    package main; import ( "net" "fmt" "bufio" ) //里面的代码部分参考cmu440课程 //htt ...

  8. 初始nginx(启动运行) 使用nginx做一个简单的静态资源服务器

    第一次接触nginx的时候,那时候公司还是用的一些不知名的小技术,后来公司发展问题,重新招了人,然后接触到nginx,公司 使用nginx用来做代理服务器,所有请求 都先经过nginx服务器,然后交由 ...

  9. 搭建一个简单的node.js服务器

    第一步:安装node.js.可以去官网:https://nodejs.org/en/进行下载. 查看是否成功,只需在控制台输入 node -v.出现版本号的话,就证明成功了. 第二步:编写node.j ...

随机推荐

  1. RabbitMQ c#版实现(转)

    出处:https://www.cnblogs.com/hanfan/p/9842301.html 网上很多人已经总结的很好了,比如今天看到的这个.https://www.cnblogs.com/Lip ...

  2. MariaDBConn用于链接MariaDB的管理类

    https://downloads.mariadb.com/Connectors/java/connector-java-2.2.3/ public class MariaDBConn { final ...

  3. IntelliJ IDEA 2017版 Spring5 java.lang.NoSuchMethodError: org.springframework.boot.SpringApplication.<init>([Ljava/lang/Object;)V

    错误是java.lang.NoSuchMethodError: org.springframework.boot.SpringApplication.<init>([Ljava/lang/ ...

  4. 添加wifi adb

    https://blog.csdn.net/ouyang_peng/article/details/50370786 首先弄懂怎么设置adb wifi无线调试的功能,如下所示. 1. 手机端开启adb ...

  5. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  6. ng-repeat动态改变样式

    当我们使用AngularJs的ng-repeat时候动态绑定数据时,遇到遍历出来的标签样式都一样,这时候希望根据数组的下标分别对应不同的样式 解决:使用$index获取数组下标根据下标改变样式 < ...

  7. Word图片上传控件卸载教程-Xproer.WordPaster

      卸载教程:      卸载控件-IE          Windows XP          Windows 7(x86)          Windows 7(x64)      卸载控件-C ...

  8. 2017-12-24 自定义view相关学习

    学习材料: http://blog.csdn.net/u010661782/article/details/52805870 http://blog.csdn.net/chengyingzhilian ...

  9. web-day9

    第9章WEB09-Servlet篇 今日任务 完成系统的登录的功能 完成登录系统后页面定时跳转 记录系统登录成功后,系统被访问多少次 教学导航 教学目标 了解HTTP协议 掌握Servlet的编写 了 ...

  10. hide handkerchief

    Problem Description The Children’s Day has passed for some days .Has you remembered something happen ...