Ошибки при импорте драйвера 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);
}
});
}
}