node.js - typeorm createConnection 即使在带有 PG 的 MacOS 上使用 Await 也会返回 Pending
问题描述
MacOS Catalina 10.15.4
如何重现,只需使用快速指南安装
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
它只会返回
➜ MyProject npm start
> MyProject@0.0.1 start /Users/sergecolle/work/eve/MyProject
> ts-node src/index.ts
在进行故障排除时,我发现 then 和 catch 中的代码都没有被执行。修改代码后,类似于
const connection:Connection = await createConnection()
连接将处于 Pending 状态,然后程序只需跳过 then 并捕获并终止。
我已经请朋友在他的 Mac 上尝试一下,他也遇到了同样的问题。
有由 typeorm install 生成的 package.json
"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"
}
和 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"
}
}
并使用 psql 命令确保存在具有这些凭据的 postgres 数据库。
生成的 tsconfig.json
{
"compilerOptions": {
"lib": [
"es5",
"es6"
],
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./build",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true
}
}
支持 async/await 的 lib 和 target 似乎有点老了。我尝试将其更新为 es2017、es2018 和 esnext,但没有成功
解决方案
pg(node-postgres)似乎有问题。据我所知,您正在运行版本7.3.0。尝试卸载pg,npm uninstall pg --save
然后使用npm install pg --save
. 这将安装最新版本(对我来说是8.2.1)
附加信息:我有一个项目在 Ubuntu 上运行良好,然后在我的 MacBook 上设置它,在那里我遇到了同样的问题。我还尝试使用具有不同连接选项的 ConnectionManager,但它仍然无法正常工作。唯一有效的是我上面提到的解决方案
推荐阅读
- android - 数据绑定注释处理器 kapt 警告
- css - 如何在两种语言中使用不同的字体?
- gdb - 在 gdb 中格式化“p / t”的输出
- laravel - 试图为 laravel 控制器上的一个列表获取非对象的属性?
- ruby - 如何使用一个命令在 rspec 中运行多个规范文件夹?
- openssl - 如何从 PEM 确定 SSL 证书到期日期,该 PEM 在一个文件 (pem) 上连接了很多证书?
- apache-poi - 使用 Apache poi 在 powerpoint 中创建一个表
- android - android和matlab中的通道图像对比
- java - 当依赖 SimplePizzaFactory 时,PizzaStore 将如何接受不同的工厂?
- angular - Angular 4获取组件父元素的高度