TypeORM не удается подключиться без какого-либо сообщения об ошибке

#javascript #node.js #postgresql #typeorm

#javascript #node.js #postgresql #типоорм

Вопрос:

Я пытаюсь начать работу с TypeORM, но не могу заставить createConnection работать. Я запускаю tpyeorm init файл сервера по умолчанию, но ошибка или ведение журнала не отображаются, и база данных postgres не обновляется.

index.ts

 import "reflect-metadata";
import {createConnection, ConnectionOptions} from "typeorm";
import {User} from "./entity/User";
import * as ormconfig from '../ormconfig.json';

console.log("is the file called correctly?");

createConnection(ormconfig as ConnectionOptions).then(async connection => {//ive also tried removing this 'async' keyword, but that doesnt help

    console.log("Inserting a new user into the database...");
    const user = new User();
    user.firstName = "Timber";
    user.lastName = "Saw";
    user.age = 25;
    await connection.manager.save(user);
    console.log("Saved a new user with id: "   user.id);

    console.log("Loading users from the database...");
    const users = await connection.manager.find(User);
    console.log("Loaded users: ", users);

    console.log("Here you can setup and run express/koa/any other framework.");

}).catch(error => console.log(error));

console.log('is this code reached?')
  

ormconfig.json (примечание: я изменил пароль postgres на ‘root’)

 {
   "type": "postgres",
   "host": "localhost",
   "port": 5432,
   "username": "postgres",
   "password": "root",
   "database": "mhfit",
   "synchronize": true,
   "logging": true,
   "entities": [
      "src/entity/**/*.ts"
   ],
   "migrations": [
      "src/migration/**/*.ts"
   ],
   "subscribers": [
      "src/subscriber/**/*.ts"
   ],
   "cli": {
      "entitiesDir": "src/entity",
      "migrationsDir": "src/migration",
      "subscribersDir": "src/subscriber"
   }
}
  

запуск запуска дает следующий результат:

 > mhfit-server@0.0.1 start /home/james/Documents/mhfit/mhfit-server
> ts-node src/index.ts

is the file called correctly?
is this code reached?
  

Обратите внимание, что ни один из других операторов ведения журнала не выполнен. Почему это? Ошибки также не отображаются.

базы данных postgres на моем локальном компьютере:

 User$ sudo -i -u postgres
'postgres@user:~$ psql
postgres=# list
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
----------- ---------- ---------- ------------- ------------- -----------------------
 mhfit     | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres           
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres           
           |          |          |             |             | postgres=CTc/postgres
(4 rows)
  

User Таблица по умолчанию не создается после попытки запуска сервера

 postgres-# c mhfit
You are now connected to database "mhfit" as user "postgres".
mhfit-# dt
Did not find any relations.
  

Update

Я последовал и скачал код из этого руководства, и волшебным образом это сработало. Но, к сожалению, мой старый проект все равно провалился…

В конце концов я попытался поработать со своими моделями и обнаружил, что сбой произошел из-за того, что TypeORM не понравилось, как я настраиваю некоторые из моих моделей. У меня есть модель, A которая может иметь два массива model B (Bs, которые существуют до события A, и Bs, которые существуют после события A).

В TypeORM я настроил это как 2 отношения OneToMany для A и 2 отношения ManyToOne для класса B. Однако что-то в этом типе crashedorm есть. Каков правильный способ сделать это вместо этого?

A:

 ...
@OneToMany(type => B, preB => preB.preA)
preBs: B[];
@OneToMany(type => B, postB => postB.postA)
postEmotions: B[];
  

B:

 ...
@ManyToOne(type => A, preA => preA.preBs)
preA: A;
@ManyToOne(type => A, postA => postA.postBs)
postA: A;
  

Ответ №1:

В обновлении я говорю, что не удалось запустить из-за проблемы с настройкой объекта. У объекта A может быть много B объектов, как до, так и после события. В итоге я заставил его работать, настроив объекты следующим образом:

 //added this class just for fun
@InterfaceType()//TypeGraphQL stuff
export abstract class ParentEntity extends BaseEntity {
    @Field(type => ID)//TypeGraphQL stuff
    @PrimaryGeneratedColumn() public id: number;

    @Field()
    @CreateDateColumn() public createdAt: Date;

    @Field()
    @UpdateDateColumn() public updatedAt: Date;
}


@InterfaceType({ implements: ParentEntity }) //TypeGraphQL stuff
export abstract class B extends ParentEntity { //Notice this is an abstract class now
    @Field()//TypeGraphQL stuff
    @Column({
        type: "varchar",
        length: 100,
        nullable: true
    })
    myField: string;
}

@Entity()
@ObjectType({ implements: B })//TypeGraphQL stuff
export class PostB extends B {
    @ManyToOne(type => A, postB => postB.A)
    myA: A;
}


@Entity()
@ObjectType({ implements: B })
export class PreB extends B {
    @ManyToOne(type => A, PreB => PreB.A)
    myA: A;
}


@Entity()
@ObjectType({ implements: ParentEntity })
export class A extends ParentEntity {
    @OneToMany(type => PreB, bPre => bPre.myA)
    preBs: PreB[];
    @OneToMany(type => PostB, bPost => bPost.myA)
    postBs: PostB[];
}
  

Мне также пришлось обновить свой пакет TypeORM…

Редактировать: дублирование ваших объектов приводит к удвоению работы при создании преобразователей, сеялок и при выполнении запросов во внешнем интерфейсе. Более простой способ — добавить поле / столбец перечисления типа в объект.