typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库
接上一篇,这里使用 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 数据库的更多相关文章
- typescript-koa-postgresql 实现一个简单的rest风格服务器 —— typescript 开发环境配置
最近需要用 nodeJS 写一个后台程序,为了能够获得 IDE 的更多代码提示,决定用 typescript 来编写,随便也学习下 ts,在这记录下实现过程. 1.新建文件夹 typescript-k ...
- typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 集成 koa
接上文 1.安装 koa yarn add koa koa-router koa-static yarn add @types/koa @types/koa-router @types/koa-sta ...
- 一个简单的Java web服务器实现
前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...
- 使用webpy创建一个简单的restful风格的webservice应用
下载:wget http://webpy.org/static/web.py-0.38.tar.gz解压并进入web.py-0.38文件夹安装:easy_install web.py 这是一个如何使用 ...
- Golang学习-第二篇 搭建一个简单的Go Web服务器
序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...
- nodeJS搭建一个简单的(代理)web服务器
前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理.最近在用vuejs,发现webpack-dev-server的代理简单好用.于是仿照写了一个简单的web服务器,用于非webpack的项 ...
- golang 创建一个简单的广播echo服务器
package main; import ( "net" "fmt" "bufio" ) //里面的代码部分参考cmu440课程 //htt ...
- 初始nginx(启动运行) 使用nginx做一个简单的静态资源服务器
第一次接触nginx的时候,那时候公司还是用的一些不知名的小技术,后来公司发展问题,重新招了人,然后接触到nginx,公司 使用nginx用来做代理服务器,所有请求 都先经过nginx服务器,然后交由 ...
- 搭建一个简单的node.js服务器
第一步:安装node.js.可以去官网:https://nodejs.org/en/进行下载. 查看是否成功,只需在控制台输入 node -v.出现版本号的话,就证明成功了. 第二步:编写node.j ...
随机推荐
- 2018.06.27The Windy's(费用流)
The Windy's Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 6003 Accepted: 2484 Descripti ...
- android检测手机是否安装某个app
public static boolean isAvilible(Context context, String packageName){ //获取packagemanager final Pack ...
- vue 开发系列(五) 调用原生API
概要 我们在开发手机端程序的时候了,我们经常需要使用到拍照,二维码的功能.数字天堂公司提供了大量的原生API支持. http://www.html5plus.org/doc/ 实现 1.在hbuild ...
- ACM-ICPC 2018 徐州赛区网络预赛 G Trace(逆向,两颗线段树写法)
https://nanti.jisuanke.com/t/31459 思路 凡是后面的轨迹对前面的轨迹有影响的,可以尝试从后往前扫 区间修改需要push_down,单点更新所以不需要push_up(用 ...
- s5-1 CPU调度
基本概念 通过多道程序设计得到 CPU 的最高利用率 (CPU-- I/O 脉冲周期 - - 进程的执行包括进程在 CPU 上执行和等待 I/O ) 进程的执行以 CPU 脉冲开始,其后跟着 I/O ...
- ROM的一种写法
module mr_rom_pll_valuemask_8bpc #( , , , , // 6*7 // alt_clogb2(42) ) ( input wire clock, :] addr_p ...
- poj 1094 Sorting It All Out 拓补排序
Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...
- 信息安全技术PGP实验 20155205 20155218
信息安全技术PGP实验 一.实验过程 PGP的安装与设置(Mac版) 访问GPGTools网站,下载GPG Suite for OS X,下载完毕,双击dmg文件,运行安装操作. 创建PGP密钥(一定 ...
- (转)私有代码存放仓库 BitBucket介绍及入门操作
转自:http://blog.csdn.net/lhb_0531/article/details/8602139 私有代码存放仓库 BitBucket介绍及入门操作 分类: 研发管理2013-02-2 ...
- Java理论学时第四节。课后作业。
请查看String.equals()方法的实现代码,注意学习其实现方法. public class StringEquals { public static void main(String[] ar ...