Ошибки при импорте драйвера Javascript Neo4j в Angular 2 CLI

Привет, у меня какой-то модуль не обнаружил ошибок при попытке использовать драйвер Neo4j в моем приложении Angular 2 CLI.

Я мог бы пропустить что-то, пытаясь импортировать это.

  • Я установил его с помощью: ng install neo4j-driver
  • В моем сервисе. import 'neo4j-driver/lib/browser/neo4j-web';
  • Попытка вызвать этот пример кода в сервисе:

    getFromDB(): void {
       var neo4j = require('neo4j-driver').v1;
       var driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j", "pisikopat"));
    
       // Create a session to run Cypher statements in.
       // Note: Always make sure to close sessions when you are done using them!
       var session = driver.session();
    
       // Run a Cypher statement, reading the result in a streaming manner as records arrive:
       session
         .run("OPTIONAL MATCH (source)-[r]-(target) WHERE r is not null RETURN (source)")
         .subscribe({
           onNext: function (record) {
             console.log(record._fields);
           },
           onCompleted: function () {
             // Completed!
             session.close();
           },
           onError: function (error) {
             console.log(error);
           }
         });
     }
    

Когда я подаю заявку, я получаю следующие ошибки:

ERROR in ./~/neo4j-driver/lib/v1/internal/ch-node.js
Module not found: Error: Can't resolve 'net' in 'E:\emek\node_modules\neo4j-driver\lib\v1\internal'
 @ ./~/neo4j-driver/lib/v1/internal/ch-node.js 32:11-25 364:2-24
 @ ./~/neo4j-driver/lib/v1/internal/connector.js
 @ ./~/neo4j-driver/lib/v1/driver.js
 @ ./~/neo4j-driver/lib/v1/index.js
 @ ./~/neo4j-driver/lib/index.js
 @ ./src/app/services/heroes.service.ts
 @ ./src/app/app.component.ts
 @ ./src/app/index.ts
 @ ./src/main.ts
 @ multi main

ERROR in ./~/neo4j-driver/lib/v1/internal/ch-node.js
Module not found: Error: Can't resolve 'tls' in 'E:\emek\node_modules\neo4j-driver\lib\v1\internal'
 @ ./~/neo4j-driver/lib/v1/internal/ch-node.js 36:11-25
 @ ./~/neo4j-driver/lib/v1/internal/connector.js
 @ ./~/neo4j-driver/lib/v1/driver.js
 @ ./~/neo4j-driver/lib/v1/index.js
 @ ./~/neo4j-driver/lib/index.js
 @ ./src/app/services/heroes.service.ts
 @ ./src/app/app.component.ts
 @ ./src/app/index.ts
 @ ./src/main.ts
 @ multi main

ERROR in ./~/neo4j-driver/lib/v1/internal/ch-node.js
Module not found: Error: Can't resolve 'readline' in 'E:\emek\node_modules\neo4j-driver\lib\v1\internal'
 @ ./~/neo4j-driver/lib/v1/internal/ch-node.js 92:2-21
 @ ./~/neo4j-driver/lib/v1/internal/connector.js
 @ ./~/neo4j-driver/lib/v1/driver.js
 @ ./~/neo4j-driver/lib/v1/index.js
 @ ./~/neo4j-driver/lib/index.js
 @ ./src/app/services/heroes.service.ts
 @ ./src/app/app.component.ts
 @ ./src/app/index.ts
 @ ./src/main.ts
 @ multi main

angular-cli: 1.0.0-beta.15 узел: 4.5.0 os: win32 x64

1 ответ

Это может быть немного поздно, но здесь это все равно.

Во-первых, вам нужно изменить способ импорта и назначения драйвера. Изменить:

import 'neo4j-driver/lib/browser/neo4j-web';

Для того, чтобы:

import * as neo4j_driver from 'neo4j-driver/lib/browser/neo4j-web.min.js';

Затем измените синтаксис вида узла:

var neo4j = require('neo4j-driver').v1;

Для того, чтобы:

const neo4j = neo4j_driver.v1;

Это избавит вас от ошибок, которые у вас есть.

Тогда вы можете получить ошибки, не назначив порт в вашем URI. Чтобы получить правильный порт (7474 у меня не работал), я запустил БД и зашел в браузер Neo4j по адресу localhost:7474. Затем вам нужно заглянуть вниз на страницу, где написано: "Вы подключены как пользователь neo4j к серверу bolt://localhost:7687". Я не уверен, является ли это значением по умолчанию или назначено, но в любом случае.

Затем я использовал этот порт в своем URI, и теперь все работает внутри Angular (хотя я не могу заставить это работать, если использование удаленного соединения, такого как с Graphene, и единственная документация, которую я могу найти, не применима к драйверу JS).

Вот мое полное решение:

import {Component, OnInit} from '@angular/core';
import * as neo4j_driver from 'neo4j-driver/lib/browser/neo4j-web.min.js';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  title = 'app works!';

  constructor() {
  }

  ngOnInit() {
    const neo4j = neo4j_driver.v1;
    const uri = 'bolt://localhost:7687';
    const user = 'neo4j';
    const password = '<your password>';
    const driver = neo4j.driver(uri, neo4j.auth.basic(user, password), {maxTransactionRetryTime: 15000});

    // Register a callback to know if driver creation was successful:
    driver.onCompleted = function () {
    // proceed with using the driver, it was successfully instantiated
    };
    // Register a callback to know if driver creation failed.
    // This could happen due to wrong credentials or database unavailability:
    driver.onError = function (error) {
      console.log('Driver instantiation failed', error);
    };

    const session = driver.session();
    const result = session.run('MATCH (a:Person) RETURN a.name ORDER BY a.name');
    const people = [];

    result.subscribe({
      onNext: record => {
        const name = record.get(0);
        people.push(name);
      },
      onCompleted: () => {
        session.close();
        console.log(people);
      },
      onError: error => {
        console.log(error);
      }
    });
  }
}
Другие вопросы по тегам