傻瓜式通俗易懂nodejs连neo4j教程,一个坑都不想踩!

5,369 阅读4分钟

这是一个全套的傻瓜式教程,把可能出现问题的地方进行了汇总,日常项目习惯了nodejs,(也许java和python会很方便),加上nodejs的教程少,做一个分享帮助大家一次教程,快乐连通。

毕设内容里有一个图谱相关的内容,之前一直用静态的json文件,想着加个数据库能够实现动态交互,选择了图数据库neo4j,作为一个踩啥啥有坑的bug挖掘机,搜了好多教程才顺利开启服务器访问数据库,分享一下配置经验,以及,你可能遇见的问题,我基本遇了个遍......

部署Neo4j数据库

这里主要参考了w3c提供的教程 www.w3cschool.cn/neo4j/neo4j…

坑点1 neo4j版本选择——建议使用zip安装

按照w3c的教程快乐前往neo4j官网,页面长得和w3c截图不太一样。可以选择桌面版或者压缩包安装

桌面版
点击download,会出现一个用户表达,填写一下用户名之类的才能前往下载页面,下载页面会有一个key,作为登录口令

当我下载桌面版一步步安装之后就可以打开桌面图标使用,预览效果都很好,但是!我桌面版没法从浏览器输入localhost或者127访问,总让我输入用户名和密码,在默认都是neo4j的前提下,登录一次会提示修改密码的,但是没有找到什么好的解决办法,所以这里我还是推荐搞zip一步步配置

坑点2 neo4j安装时来自java的威胁

使用zip安装时需要注意java环境的配置,这里注意jdk版本,我之前的版本太低结果无法顺利启动服务器

  • 先讲一下zip版本的安装

还是在neo4j官网,进入下载页面之后,抬头看,选适合自己的链接(我选的windows)

也是逐步解压就行,我放在D盘了。

然后配置环境变量

新建环境变量 NEO4J_HOME,设置值为:解压的文件夹,要到neo4j-community-4.0.5才行,有window的还是外级
已有的环境变量 PATH,新加一条,具体到neo4j-community-2.1.3 \ bin

win+R cmd打开命令命令提示符,键入

neo4j.bat console.log

按回车运行 如果没有事啥报错,目前就是安全的,如果有报错,那大概率它说需要xx版本的jdk,执行卸载重装(如果会更新也可以直接更新)操作,我的提示安装11,去oracle重新下载一遍,执行java配置系列操作,就ok了,再次执行上述命令行操作,会有令人欣喜的结果。

  • 前往浏览器进行首次登录改密码的操作

localhost:7474或者127.0.0.1:7474都可以,开启的界面需要输入初始用户名和密码,都是neo4j,之后会让用户改一次密码,改好记住就行了。可以输几个语句生成节点和关系,后面测试用也方便。

示例输入

创建lilei节点

CREATE (embiid: PERSON {name: 'lilei'})

匹配lilei节点,具备关系“喜欢”,连接到(创建一个)hanmeimei节点

MATCH (embiid:PERSON{name:'lilei'})
MERGE (embiid)-[:LIKES{since:'1990'}]->(hanmeimei: PERSON{name:'hanmeimei'})

可视化效果如下:

目前部署工作就都完成了

使用express框架快速创建服务器,连接neo4j数据库

这里我使用的是neo4j-driver这个中间件

坑点3 服务器连数据库没啥反应

在首次尝试连接数据库时,我参考皮蛋菌的《nodejs + neo4j + d3js 集群图的实现》的教程 zhuanlan.zhihu.com/p/23618934 但是我请求数据库时总是返回一个null,目前还不清楚为啥,可能我脸太黑,总遇到奇奇怪怪的问题,但大佬讲的着实好,大家可以参考,教程更新了koa版,我不太熟就先express了

neo4j-driver的使用参考了Traversy Medi a的 Node.js With Neo4j - Freestyle Coding [2],视频教程

这里大家可以按习惯用express快速创建一个服务器,引入neo4j-driver即可,代码贴在下面供参考

//app.js
var express=require('express');
var path=require('path');
var logger=require('morgan');
var bodyParser=require('body-parser');
var neo4j=require("neo4j-driver");
var app=express();

app.set('views',path.join(__dirname,'views'));
app.set('view engine','ejs');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use(express.static(path.join(__dirname,"public")));

var driver=neo4j.driver('bolt://localhost',neo4j.auth.basic('neo4j','0000'));
var session=driver.session();

app.get("/",function(req,res){
    session.run('MATCH(n:PERSON) RETURN n')
           .then(function(result){
                result.records.forEach(function(record){
                    console.log(record._fields[0].properties);
                });
           })
           .catch(function(err){
                console.log(err);
           });
    res.send('It works')
})
app.listen(3000);
console.log("Server Started on Port 3000");
module.exports=app;

使用VSCode,选择该文件,右键在终端中打开,输入node app,按回车 浏览器访问端口3000 可以在控制台看到我们请求的PERSON节点就返回来了

第一次记录教程,也有很多不足之处,之后整个过程可能还有很多问题,我也还在一点一点学习,之后也会不断更新,大家一起少踩坑