node.js - typeorm createConnection returnează Pending chiar și cu Await pe MacOS cu PG


MacOS Catalina 10.15.4

Cum să reproduceți, pur și simplu instalați folosind ghidul rapid

npm install typeorm --save
npm install reflect-metadata --save
npm install @types/node --save
npm install pg --save
npm install typeorm -g
typeorm init --name MyProject --database postgres
cd MyProject
npm install
npm start

Pur și simplu se va întoarce

➜  MyProject npm start

> [email  start /Users/sergecolle/work/eve/MyProject
> ts-node src/index.ts

Când am depanare, am descoperit că nici codul din then, nici cel din catch nu s-au executat. După ce am modificat codul, la ceva de genul

const connection:Connection = await createConnection()

conexiunea va fi în stare În așteptare și apoi programul pur și simplu o sări peste ea și o prindă și să încheie.

Am rugat un prieten să încerce pe Mac-ul lui și el a întâmpinat aceeași problemă.

acolo fișierul package.json generat de instalarea typeorm

   "name": "MyProject",
   "version": "0.0.1",
   "description": "Awesome project developed with TypeORM.",
   "devDependencies": {
      "ts-node": "3.3.0",
      "@types/node": "^8.0.29",
      "typescript": "3.3.3333"
   },
   "dependencies": {
      "typeorm": "0.2.25",
      "reflect-metadata": "^0.1.10",
      "pg": "^7.3.0",
      "express": "^4.15.4",
      "body-parser": "^1.18.1"
   },
   "scripts": {
      "start": "ts-node src/index.ts"
   }

și fișierul ormconfig.json

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

și s-a asigurat că există o bază de date Postgres cu aceste acreditive folosind comanda psql.

Fișierul tsconfig.json generat

{
   "compilerOptions": {
      "lib": [
         "es5",
         "es6"
      ],
      "target": "es5",
      "module": "commonjs",
      "moduleResolution": "node",
      "outDir": "./build",
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
      "sourceMap": true
   }
}

Biblioteca și ținta par puțin vechi pentru a suporta async/await. Am încercat să le actualizez la es2017, es2018 și esnext, dar fără succes

Răspuns #1

Se pare că este o problemă cu pg (node-postgres). Din câte pot vedea, utilizați versiunea 7.3.0. Încercați să dezinstalați pg cu npm uninstall pg --save și apoi să îl instalați din nou cu npm install pg --save. Aceasta va instala cea mai recentă versiune (care pentru mine a fost 8.2.1 ).

Informații suplimentare: Am avut un proiect care funcționa bine pe Ubuntu și apoi l-am configurat pe MacBook-ul meu, unde am întâmpinat aceeași problemă. De asemenea, am încercat să folosesc ConnectionManager cu diferite opțiuni de conexiune și tot nu a funcționat. Singurul lucru care a funcționat a fost soluția pe care am menționat-o mai sus