«Клиентский сетевой сокет отключен до установления безопасного соединения TLS» - Neo4j / GraphQL - PullRequest
0 голосов
/ 23 апреля 2020

Запуск Nest JS и GraphQL с использованием yarn start:dev с использованием await app.listen(3200);. При попытке подключиться к моему Neo4J Desktop я получаю эту ошибку, пытаясь получить мои запросы на localhost:3200/graphQL:

 "errors": [
   {
     "message": "Client network socket disconnected before secure TLS connection was established",
     "locations": [
       {
         "line": 2,
         "column": 3
       }
     ],
     "path": [
       "getMovies"
     ],
     "extensions": {
       "code": "INTERNAL_SERVER_ERROR",
       "exception": {
         "code": "ServiceUnavailable",
         "name": "Neo4jError"
       }
     }
   }
 ],
 "data": null
}

Поэтому я решил, что мой локальный график рабочего стола Neo4J не работает правильно, но я не могу кажется, найти какой-либо ответ, как решить эту проблему .. В настоящее время у меня есть файл config.ts, который имеет:

export const HOSTNAME = 'localhost';
export const NEO4J_USER = 'neo4j';
export const NEO4J_PASSWORD = '123';

и файл neogql.resolver.ts:

import {
  Resolver,
  Query,
  Args,
  ResolveProperty,
  Parent,
} from '@nestjs/graphql';
import { HOSTNAME, NEO4J_USER, NEO4J_PASSWORD } from '../config';
import { Movie } from '../graphql';
import { Connection, relation, node } from 'cypher-query-builder';
import { NotFoundException } from '@nestjs/common';
const db = new Connection(`bolt://${HOSTNAME}`, {
  username: NEO4J_USER,
  password: NEO4J_PASSWORD,
});
@Resolver('Movie')
export class NeogqlResolver {
  @Query()
  async getMovies(): Promise<Movie> {
    const movies = (await db
      .matchNode('movies', 'Movie')
      .return([
        {
          movies: [{ id: 'id', title: 'title', year: 'year' }],
        },
      ])
      .run()) as any;
return movies;
  }
@Query('movie')
  async getMovieById(
    @Args('id')
    id: string,
  ): Promise<any> {
    const movie = (await db
      .matchNode('movie', 'Movie')
      .where({ 'movie.id': id })
      .return([
        {
          movie: [{ id: 'id', title: 'title', year: 'year' }],
        },
      ])
      .run<any>()) as any;
if (movie.length === 0) {
      throw new NotFoundException(
        `Movie id '${id}' does not exist in database `,
      );
    }
return movie[0];
  }
@ResolveProperty()
  async actors(@Parent() movie: any) {
    const { id } = movie;
return (await db
      .match([node('actors', 'Actor'), relation('in'), node('movie', 'Movie')])
      .where({ 'movie.id': id })
      .return([
        {
          actors: [
            {
              id: 'id',
              name: 'name',
              born: 'born',
            },
          ],
        },
      ])
      .run()) as any;
  }
}

1 Ответ

0 голосов
/ 23 апреля 2020

У меня была такая же проблема с grandSTACK при работе с сервером neo4j версии 4. Согласно Уиллу Лайону, это связано с несовпадающими значениями по умолчанию для шифрования драйвера и базы данных: https://community.neo4j.com/t/migrating-an-old-grandstack-project-to-neo4j-4/16911/2

Таким образом, передача объекта конфигурации с

{ encrypted: "ENCRYPTION_OFF"}

в конструктор Connection должен сделать трюк.

...