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