ApiJson TypeORM专题

1,807 阅读2分钟

启动

进入src文件夹下,执行ts-node server

编译

在根目录下,执行tsc

热更新

  1. vscode终端 -> 运行任务 -> tsc:监视,这样,每次的修改都会重新打包到build文件夹下
  2. 安装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检查和修改表结构

  1. 分页在find的配置中有讲解,通过skiptake来控制开始点和数量
  2. 带有@JoinColumn()column会生成外键,在manyToone中也有详细讲解
  3. 类似密码等不该默认随实例返回的
@Column({select: false})
    password: string;
...
//可以通过以下方法获得
const users = await connection.getRepository(User)
    .createQueryBuilder()
    .select("user.id", "id")
    .addSelect("user.password")
    .getMany();
  1. @ManyToOne 的实例会自动生成一个新列,默认指向目标id
  2. datetime类型的列会始终重建,所以在初始connection配置中设置"synchronize": false避免typeorm检查和修改表结构
  3. 查指定表的指定字段并加别名,不加别名则以表中字段名返回
await getRepository(Strategy)
        .createQueryBuilder("strategy")
        .select("strategy.id, strategy.title as title, strategy.content as content")
        .getRawMany();
  1. 查询语句复用
// /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();
  1. @CreateDateColumn标签,只有使用Entity.insert()会自动生成,如果使用Entity.save()命令,不会自动生成
  2. @Column标签options配置中的defalut属性,不会接收值,而是用数据库中的默认值

@Get("/users/:id")中使用findOneNotFondError

当传入的id是数据库中不存在的id时,会直接报NotFondError,在UserController中无法捕捉。这个报错的原因在于@Get修饰的方法需要返回一个数据或者对象,而找不到的时候 await User.findOne({ where: { id: id } });返回的是undefined,然后由routing-controllers报错,所以捕捉不到

@Post

传入的类型不符,不会报错