我正在使用docker、postgresql和nodejs (类型记录)创建一个api。自从创建管理用户以来,我就遇到了这个错误,似乎没有什么能够修复它:
码头码头错误:
Error: getaddrinfo EAI_AGAIN database
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:72:26)
[ERROR] 12:33:32 Error: getaddrinfo EAI_AGAIN database
失眠症错误:
{
"status": "error",
"message": "Internal server error - Cannot inject the dependency \"categoriesRepository\" at position #0 of \"ListCategoriesUseCase\" constructor. Reason:\n No repository for \"Category\" was found. Looks like this entity is not registered in current \"default\" connection?"
}
我遵循一个在线课程,这同样的代码似乎适用于其他人,因为在该课程的论坛上没有这个错误的报告。
从我收集到的数据来看,在连接到数据库时,这似乎是某种类型的问题,数据库是一个码头容器。这是我的docker-compose.yml文件:
version: "3.9"
services:
database_ignite:
image: postgres
container_name: database_ignite
restart: always
ports:
- 5432:5432
environment:
- POSTGRES_USER=something
- POSTGRES_PASSWORD=something
- POSTGRES_DB=rentx
volumes:
- pgdata:/data/postgres
app:
build: .
container_name: rentx
restart: always
ports:
- 3333:3333
- 9229:9229
volumes:
- .:/usr/app
links:
- database_ignite
depends_on:
- database_ignite
volumes:
pgdata:
driver: local
我的server.ts文件:
import "reflect-metadata";
import express, { Request, Response, NextFunction } from "express";
import "express-async-errors";
import swaggerUi from "swagger-ui-express";
import { AppError } from "@shared/errors/AppError";
import createConnection from "@shared/infra/typeorm";
import swaggerFile from "../../../swagger.json";
import { router } from "./routes";
import "@shared/container";
createConnection();
const app = express();
app.use(express.json());
app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerFile));
app.use(router);
app.use(
(err: Error, request: Request, response: Response, next: NextFunction) => {
if (err instanceof AppError) {
return response.status(err.statusCode).json({
message: err.message,
});
}
return response.status(500).json({
status: "error",
message: `Internal server error - ${err.message}`,
});
}
);
app.listen(3333, () => console.log("Server running"));
这是我的index.ts文件,在src>modules>shared>infra>http>server.ts里面:
import { Connection, createConnection, getConnectionOptions } from "typeorm";
export default async (host = "database"): Promise<Connection> => {
const defaultOptions = await getConnectionOptions();
return createConnection(
Object.assign(defaultOptions, {
host,
})
);
};
我试着重新启动我的容器,重新制作它们,访问postgres容器并检查表,我已经将每个“数据库”切换到"localhost“,但是每次都是一样的:容器运行,但是错误仍然存在。我检查了课程的回购和我的代码匹配。我已经冲了我的DNS,这也没有任何作用。
下面是“启动所有”的admin.ts文件:
import { hash } from "bcryptjs";
import { v4 as uuidv4 } from "uuid";
import createConnection from "../index";
async function create() {
const connection = await createConnection("localhost");
const id = uuidv4();
const password = await hash("admin", 6);
await connection.query(`
INSERT INTO Users (id, name, email, password, "isAdmin", driver_license, created_at)
VALUES (
'${id}',
'admin',
'admin@rentx.com.br',
'${password}',
true,
'0123456789',
NOW()
)
`);
await connection.close;
}
create().then(() => console.log("Administrative user created"));
我很想知道是什么导致了这个错误。
发布于 2022-03-24 06:02:46
看起来,在您的database_ignite
文件中有一个名为docker-compose.yml
的服务。默认情况下,Docker使用服务的名称创建主机。尝试将主机从database
中的index.ts
文件更改为database_ignite
import { Connection, createConnection, getConnectionOptions } from "typeorm";
export default async (host = "database_ignite"): Promise<Connection> => {
// Changed database to ^^ database_ignite ^^
const defaultOptions = await getConnectionOptions();
return createConnection(
Object.assign(defaultOptions, {
host,
})
);
};
https://stackoverflow.com/questions/71527426
复制相似问题