ts+koa项目搭建

搭建步骤

1. 初始化项目

npm init
npm i koa koa-router
npm i --save-dev typescript ts-node nodemon
npm i --save-dev @types/koa @types/koa-router

2. 新建 tsconfig.json

在项目根目录,新建tsconfig.json,并加入内容。

3. 创建server.ts

要使你的服务“跑”起来,在刚建立的src文件夹上新建server.ts,作为此应用的入口,在此文件中加入内容。

4. 路由

koa是一个非常简洁的框架,它并没有提供路由。在此项目,我们使用koa-router。
koa-router的使用其实不太复杂。

5. 跑起来

npm run watch-server 命令

6. 连接数据库

1) 安装相应插件

npm install sequelize -s
npm install mysql2 -s

2)编写数据库连接设置(models/index.ts)

import { Sequelize } from 'sequelize';

const DbSequelize = new Sequelize({
    host: "localhost",//本地:localhost,其他服务器使用ip地址
    dialect: "mysql",//连接数据库类型
    database: "demo_koa_ts",//数据库名称
    username: "root",//数据库账户用户名
    password: "syy2307",//数据库账户密码
    define: {
        timestamps: false,//是否开启时间戳createAt  deleteAt  updateAt
        underscored: true,//下划线
        freezeTableName: true, //禁止sequelize修改表名,默认会在表后边添加一个字母`s`表示复数
        paranoid: true //开启假删除
    },
    pool: {
        max: 10,
        min: 0,
        acquire: 30000,  //请求超时时间
        idle: 10000 //断开连接后,连接实例在连接池保持的时间
    },
    timezone: '+08:00',//时区设置,东八区  默认是'+00:00'
});

export default DbSequelize;

3)编写相应的models、service、controller文件夹和内容。

4)入口文件引入数据库连接文件(models/index.ts)

5)创建router文件夹,存放接口地址,及其对应的controller。

6)入口文件相关的路由设置,改为引入路由文件。

7)安装koa-body

npm install koa-body -s

8)入口文件添加koa-body的使用。

app.use(KoaBody({
    multipart: true
}));

9)完成,使用postman测试接口。

1. TS-Node

此包提供了TypeScript的运行环境,即不需要编译也能运行TypeScript代码。
在开发期间省去编译这一步。

2. Nodemon

Nodemon会监视node应用中的代码,当它发现改变,会自动重启服务。
这对于开发来说,省了重启服务这一步。

nodemon --watch ‘src/’ -e ts,tsx --exec ts-node src/server.ts
并没有在我修改src文件夹下文件时重新加载,这是为什么?

3. koa-body

是一个可以帮助解析 http 中 body 的部分的中间件,包括 json、表单、文本、文件等

4. sequelize

ORM工具,可以映射表,能使sql变得更简单。

koa-body设置

KoaBody({
  multipart: true, 支持文件格式
  formidable: {
      maxFileSize: 1000 * 1024 * 1024    // 设置上传文件大小最大限制,默认2M
  },
  formLimit: "10mb",
  jsonLimit: "10mb",
  textLimit: "10mb"
})

https://www.npmjs.com/package/koa-body

Sequelize

1. attributes

1. 要仅选择某些属性,可以使用该attributes选项。
Model.findAll({
  attributes: ['foo', 'bar']
});
//等同于 SELECT foo, bar ...
2.可以使用嵌套数组重命名属性:
Model.findAll({
  attributes: ['foo', ['bar', 'baz']]
});
//等同于SELECT foo, bar AS baz..
3.sequelize.fn用来进行聚合
Model.findAll({
 	attributes: [[sequelize.fn('COUNT', sequelize.col('hats')), 'no_hats']]
});
//等同于SELECT COUNT(hats) AS no_hats ...
4.删除选定的几个属性
Model.findAll({
  attributes: { exclude: ['baz'] }
});

2. where

Sequelize的where配置项基本上完全支持了SQL的where子句的功能
1. 条件
Model.findAll({
    'where': {
        'id': [1, 2, 3],
        'nick': 'a',
        'department': null
    }
});
2.可包含操作符($and\$or...)---新版本修改了
User.findAll({
    'where': {
        'id': {
            '$eq': 1,                // id = 1
            '$ne': 2,                // id != 2

            '$gt': 6,                // id > 6
            '$gte': 6,               // id >= 6

            '$lt': 10,               // id < 10
            '$lte': 10,              // id <= 10

            '$between': [6, 10],     // id BETWEEN 6 AND 10
            '$notBetween': [11, 15], // id NOT BETWEEN 11 AND 15

            '$in': [1, 2],           // id IN (1, 2)
            '$notIn': [3, 4]         // id NOT IN (3, 4)
        },
        'nick': {
            '$like': '%a%',          // nick LIKE '%a%'
            '$notLike': '%a'         // nick NOT LIKE '%a'
        },
        'updated_at': {
            '$eq': null,             // updated_at IS NULL
            '$ne': null              // created_at IS NOT NULL
        }
    }
    })
User.findAll({
    'where': {
        '$or': [
            {'id': [1, 2]},
            {'nick': null}
        ]
    }
});
where: {
            [Op.or]: {
              name: {
                [Op.like]: `%${userSubject}%`
              },
              nameEn: {
                [Op.like]: `%${userSubject}%`
              }
            }
          }

配置文件属性

1.配置文件(typescript — tsconfig.js 可通过tsc init生成)

  "compilerOptions": { // 配置编译选项
    "target": "es2017",// 多用es6
    "module": "commonjs",
    "noImplicitAny": true, //当表达式和申明 类型为any时,是否需要发出警告,设置false,则不警告
    "outDir": "dist",
    "sourceMap": true,//为发出的JavaScript文件创建源映射文件。  性能节省,可能加载更快
    "moduleResolution":"node",//指定TypeScript如何从给定模块说明符中查找文件。指定当前项目的运行模式,默认浏览器模式。
    "baseUrl":".", //根目录
    "types": [  // 引用第三方库类型,可直接使用。
       "@types/node"
    ],
    "typeRoots": [ // 自定义类型
       "./types"
    ],
  },
  "include": [ // 指定编译文件位置
     "src/**/*"
  ],
  "exclude": [
     "node_modules",
     "**/*.spec.ts"
  ]
}
https://www.typescriptlang.org/docs/handbook/compiler-options.html 官方地址

你可能感兴趣的:(ts+koa,typescript,node.js)