启动
进入src文件夹下,执行ts-node server
编译
在根目录下,执行tsc
热更新
- 在
vscode中终端 -> 运行任务 -> tsc:监视,这样,每次的修改都会重新打包到build文件夹下 - 安装
nodemon,在build文件夹下,执行nodemon server.js
返回状态码
//在useKoaServer后,和静态资源与koaVueMiddleware前添加一个中间件
koa.use(async (ctx, next)=> {
await next();
if(Object.prototype.toString.call(ctx.body)=== '[object Array]'){
if(ctx.body[0]){
ctx.response.status= 500;
ctx.response.body= ctx.body[1];
} else {
console.log(ctx.body)
}
}
});
typeORM typeorm.io/#/
在初始connection配置中设置
"synchronize": false避免typeorm检查和修改表结构
- 分页在
find的配置中有讲解,通过skip和take来控制开始点和数量 - 带有
@JoinColumn()的column会生成外键,在manyToone中也有详细讲解 - 类似密码等不该默认随实例返回的
@Column({select: false})
password: string;
...
//可以通过以下方法获得
const users = await connection.getRepository(User)
.createQueryBuilder()
.select("user.id", "id")
.addSelect("user.password")
.getMany();
- @ManyToOne 的实例会自动生成一个新列,默认指向目标id
datetime类型的列会始终重建,所以在初始connection配置中设置"synchronize": false避免typeorm检查和修改表结构- 查指定表的指定字段并加别名,不加别名则以表中字段名返回
await getRepository(Strategy)
.createQueryBuilder("strategy")
.select("strategy.id, strategy.title as title, strategy.content as content")
.getRawMany();
- 查询语句复用
// /select-query-builder/getting-raw-results
const userQb = await connection.getRepository(User)
.createQueryBuilder("user")
.select("user.name", "name")
.where("user.registered = :registered", { registered: true });
const posts = await connection
.createQueryBuilder()
.select("user.name", "name")
.from("(" + userQb.getQuery() + ")", "user")
.setParameters(userQb.getParameters())
.getRawMany();
@CreateDateColumn标签,只有使用Entity.insert()会自动生成,如果使用Entity.save()命令,不会自动生成@Column标签options配置中的defalut属性,不会接收值,而是用数据库中的默认值
@Get("/users/:id")中使用findOne报NotFondError
当传入的id是数据库中不存在的id时,会直接报NotFondError,在UserController中无法捕捉。这个报错的原因在于@Get修饰的方法需要返回一个数据或者对象,而找不到的时候
await User.findOne({ where: { id: id } });返回的是undefined,然后由routing-controllers报错,所以捕捉不到
@Post
传入的类型不符,不会报错