npm init
npm i koa koa-router
npm i --save-dev typescript ts-node nodemon
npm i --save-dev @types/koa @types/koa-router
在项目根目录,新建tsconfig.json,并加入内容。
要使你的服务“跑”起来,在刚建立的src文件夹上新建server.ts,作为此应用的入口,在此文件中加入内容。
koa是一个非常简洁的框架,它并没有提供路由。在此项目,我们使用koa-router。
koa-router的使用其实不太复杂。
npm run watch-server 命令
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测试接口。
此包提供了TypeScript的运行环境,即不需要编译也能运行TypeScript代码。
在开发期间省去编译这一步。
Nodemon会监视node应用中的代码,当它发现改变,会自动重启服务。
这对于开发来说,省了重启服务这一步。
nodemon --watch ‘src/’ -e ts,tsx --exec ts-node src/server.ts
并没有在我修改src文件夹下文件时重新加载,这是为什么?
是一个可以帮助解析 http 中 body 的部分的中间件,包括 json、表单、文本、文件等
ORM工具,可以映射表,能使sql变得更简单。
KoaBody({
multipart: true, 支持文件格式
formidable: {
maxFileSize: 1000 * 1024 * 1024 // 设置上传文件大小最大限制,默认2M
},
formLimit: "10mb",
jsonLimit: "10mb",
textLimit: "10mb"
})
https://www.npmjs.com/package/koa-body
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'] }
});
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}%`
}
}
}
"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 官方地址