首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误: getaddrinfo EAI_AGAIN数据库位于GetAddrInfoReqWrap.onlookup [作为oncomplete]

错误: getaddrinfo EAI_AGAIN数据库位于GetAddrInfoReqWrap.onlookup [作为oncomplete]
EN

Stack Overflow用户
提问于 2022-03-18 13:00:45
回答 1查看 5.4K关注 0票数 1

我正在使用docker、postgresql和nodejs (类型记录)创建一个api。自从创建管理用户以来,我就遇到了这个错误,似乎没有什么能够修复它:

码头码头错误:

代码语言:javascript
运行
复制
Error: getaddrinfo EAI_AGAIN database
   at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:72:26)
[ERROR] 12:33:32 Error: getaddrinfo EAI_AGAIN database

失眠症错误:

代码语言:javascript
运行
复制
{
    "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文件:

代码语言:javascript
运行
复制
    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文件:

代码语言:javascript
运行
复制
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里面:

代码语言:javascript
运行
复制
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文件:

代码语言:javascript
运行
复制
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"));

我很想知道是什么导致了这个错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-24 06:02:46

看起来,在您的database_ignite文件中有一个名为docker-compose.yml的服务。默认情况下,Docker使用服务的名称创建主机。尝试将主机从database中的index.ts文件更改为database_ignite

代码语言:javascript
运行
复制
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,
        })
    );
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71527426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档