# How to integrate Elasticsearch (8.x) with Nest.js

**URL:** <https://discuss.elastic.co/t/how-to-integrate-elasticsearch-8-x-with-nest-js/341166>\
**Category:** Elasticsearch\
**Created:** [August 20, 2023, 1:09am UTC](https://discuss.elastic.co/t/how-to-integrate-elasticsearch-8-x-with-nest-js/341166 "2023-08-20T01:09:45Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![inkweon7269](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/inkweon7269/32/124738_2.png) [@inkweon7269](https://discuss.elastic.co/u/inkweon7269)\
**Post date:** [August 20, 2023, 1:09am UTC](https://discuss.elastic.co/t/how-to-integrate-elasticsearch-8-x-with-nest-js/341166/1 "2023-08-20T01:09:45Z")

</div>

I have a question about connecting Elasticsearch with Nest.js.

When I make an API call to Elasticsearch, it works fine.

 ![스크린샷 2023-08-20 오전 9.52.49](https://us1.discourse-cdn.com/elastic/original/3X/8/2/8242e9014a977af6dd446bfac2b465d2fccdc025.png)

In Nest.js, I've written the code as follows.

**search.module.ts**

```auto
import { Module } from '@nestjs/common';
import { ElasticsearchModule } from '@nestjs/elasticsearch';
import { SearchService } from './search.service';

@Module({
  imports: [
    ElasticsearchModule.registerAsync({
      useFactory: () => ({
        node: 'http://localhost:9200',
        maxRetries: 10,
        requestTimeout: 60000,
        pingTimeout: 60000,
        sniffOnStart: true,
        auth: {
          username: 'elastic',
          password: 'elastic',
        },
      }),
    }),
  ],
  providers: [SearchService],
  exports: [SearchService],
})
export class SearchModule {}

```

**search.service.ts**

```auto
import { Injectable } from '@nestjs/common';
import { ElasticsearchService } from '@nestjs/elasticsearch';

@Injectable()
export class SearchService {
  constructor(private readonly esService: ElasticsearchService) {}

  async search(q: string) {
    const result = await this.esService.search({
      index: 'csv',
      body: {
        query: {
          match: {
            title: q,
          },
        },
      },
    });

    return result;
  }
}

```

**app.controller.ts**

```auto
import { Controller, Get, Query } from '@nestjs/common';
import { SearchService } from './search/search.service';

@Controller()
export class AppController {
  constructor(private readonly searchService: SearchService) {}

  @Get()
  async getHello(@Query('q') q: string) {
    return await this.searchService.search(q);
  }
}

```

**app.module.ts**

```auto
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SearchModule } from './search/search.module';

@Module({
  imports: [SearchModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

```

**package.json**

```auto
{
  "name": "36-test",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/ **/*.ts\" \"test/** /*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@elastic/elasticsearch": "^8.9.0",
    "@nestjs/common": "^10.0.0",
    "@nestjs/core": "^10.0.0",
    "@nestjs/elasticsearch": "^10.0.1",
    "@nestjs/platform-express": "^10.0.0",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.8.1"
  },
  "devDependencies": {
    "@nestjs/cli": "^10.0.0",
    "@nestjs/schematics": "^10.0.0",
    "@nestjs/testing": "^10.0.0",
    "@types/express": "^4.17.17",
    "@types/jest": "^29.5.2",
    "@types/node": "^20.3.1",
    "@types/supertest": "^2.0.12",
    "@typescript-eslint/eslint-plugin": "^6.0.0",
    "@typescript-eslint/parser": "^6.0.0",
    "eslint": "^8.42.0",
    "eslint-config-prettier": "^9.0.0",
    "eslint-plugin-prettier": "^5.0.0",
    "jest": "^29.5.0",
    "prettier": "^3.0.0",
    "source-map-support": "^0.5.21",
    "supertest": "^6.3.3",
    "ts-jest": "^29.1.0",
    "ts-loader": "^9.4.3",
    "ts-node": "^10.9.1",
    "tsconfig-paths": "^4.2.0",
    "typescript": "^5.1.3"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

```

However, when I make the API call, I don't receive a response and instead, I get a "Connect Timeout Error." What should I do to fix this issue?

---

<div class="post-metadata">

**Author:** ![Alex\_Salgado-Elastic](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/alex_salgado-elastic/32/103081_2.png) [@Alex\_Salgado-Elastic](https://discuss.elastic.co/u/Alex_Salgado-Elastic)\
**Post date:** [August 21, 2023, 8:14pm UTC](https://discuss.elastic.co/t/how-to-integrate-elasticsearch-8-x-with-nest-js/341166/3 "2023-08-21T20:14:35Z")

</div>

Hi, What kind of error are you receiving in your logs?

---

<div class="post-metadata">

**Author:** ![Craig\_Rodrigues](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/craig_rodrigues/32/121875_2.png) [@Craig\_Rodrigues](https://discuss.elastic.co/u/Craig_Rodrigues)\
**Post date:** [August 21, 2023, 8:52pm UTC](https://discuss.elastic.co/t/how-to-integrate-elasticsearch-8-x-with-nest-js/341166/4 "2023-08-21T20:52:08Z")

</div>

Your code is trying to connect to Elasticsearch via `http://localhost:9200`

When you fully deploy and run your Next.js application,  
where is it actually running?

If it is not deployed on the same host running Elasticsearch, then it won't be able to connect to `http://localhost:9200`

---

<div class="post-metadata">

**Author:** ![inkweon7269](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/inkweon7269/32/124738_2.png) [@inkweon7269](https://discuss.elastic.co/u/inkweon7269)\
**Post date:** [August 25, 2023, 6:09am UTC](https://discuss.elastic.co/t/how-to-integrate-elasticsearch-8-x-with-nest-js/341166/5 "2023-08-25T06:09:16Z")

</div>

When I referred to the practical example from another blog and took a closer look, it seemed there were issues with the index template and the node address part. Now, it's working fine 🙂

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 22, 2023, 6:09am UTC](https://discuss.elastic.co/t/how-to-integrate-elasticsearch-8-x-with-nest-js/341166/6 "2023-09-22T06:09:38Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
