接上一篇,这里使用 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. 2019.01.21 bzoj2989: 数列(二进制分组+主席树)

    传送门 二进制分组入门题. 主席树写错调题2h+2h+2h+体验极差. 题意简述:给一堆点,支持加入一个点,询问有多少个点跟(x,y)(x,y)(x,y)曼哈顿距离不超过kkk. 思路:题目要求的是对 ...

  2. jitter

    release jitter of tasks there is a distinction between the real activation request and the actual ac ...

  3. TensorFlow 实现 RNN 入门教程

    转子:https://www.leiphone.com/news/201705/zW49Eo8YfYu9K03J.html 最近在看RNN模型,为简单起见,本篇就以简单的二进制序列作为训练数据,而不实 ...

  4. C++获取当前进程绝对路径

    获取进程的绝对路径(代码同时操作字符串获取了文件目录): 第一种代码: wstring GetProgramDir() { TCHAR exeFullPath[MAX_PATH]; // Full p ...

  5. Java理论学时第五节。课后作业。

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 设计思路:先声明一个数组,再利用for循环对每一个元素赋随机生成的值,在求所有数的和,再根据要 ...

  6. 20155326 2016-2017-2 《Java程序设计》第6周学习总结

    20155326 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 InputStream与OutputStream: 串流设计的概念 (1)Java将输入/输 ...

  7. Mybatis类型转换介绍

    1.1     目录 1.2     建立TypeHandler 1.2.1    TypeHandler接口 1.2.2    BaseTypeHandler抽象类 1.3     注册TypeHa ...

  8. HBase最佳实践(好文推荐)

    HBase最佳实践-写性能优化策略 HBase最佳实践-管好你的操作系统 HBase最佳实践之列族设计优化 [大数据]HBase最佳实践 – 集群规划

  9. jQuery 与 或 的坑

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>< ...

  10. SystemProperties.get/set property_get/set

    在java层设置系统属性要注意几点: 1 需要有系统权限.可以在AndroidManifest.xml添加android:sharedUserId="android.uid.system&q ...