微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型错误:无法读取空 Javascript Neo4J 数据的属性“身份”

如何解决类型错误:无法读取空 Javascript Neo4J 数据的属性“身份”

也许你可以帮我解决这个问题。我正在尝试在我的 js 应用程序中编写对 Neo4J 数据库的 get 请求并将此数据发送到 ejs 页面。问题是,当我的请求一无所获(null)时,它会阻止我所有的代码显示错误:“TypeError:无法读取 null 的属性 'identity'”。我唯一要寻找的是,当没有检索到任何数据时,不会发生任何事情而不会抛出任何错误......只继续执行其余的代码,但我不知道如何处理这个“空”。>

app.get('/page/:id',function(req,res) {
  var id = req.params.id;
  
      session
      .run("OPTIONAL MATCH(a:Person)-[r]-(b) WHERE id(a)=toInteger($idParam) RETURN b",{
      idParam:id
      })
      .then(function(result2){
          var RelationArr = [];
          result2.records.forEach(function(record){

            RelationArr.push({

              id: record._fields[0].identity.low,name: record._fields[0].properties.name,title: record._fields[0].properties.title,});
      });

      res.render('person',{
          relation: RelationArr,});
      })

      .catch(function(err){
        console.log(err);
      });
      })

解决方法

在访问 props 之前检查该值是否存在。

app.get('/page/:id',function(req,res) {
  var id = req.params.id;
  
      session
      .run("OPTIONAL MATCH(a:Person)-[r]-(b) WHERE id(a)=toInteger($idParam) RETURN b",{
      idParam:id
      })
      .then(function(result2){
          var RelationArr = [];
          result2.records.forEach(function(record){
            if(record._fields[0]) {
              RelationArr.push({
                id: record._fields[0].identity.low,name: record._fields[0].properties.name,title: record._fields[0].properties.title,});
           }
      });

      res.render('person',{
          relation: RelationArr,});
      })

      .catch(function(err){
        console.log(err);
      });
      })

,

我没有更改 javascript 代码来处理空值,而是更改了 Neo4J 查询以避免出现“空”值:

MATCH(a)-[r]-(b) WHERE id(a)=toInteger($idParam) OPTIONAL MATCH (a) WHERE id(a)=toInteger($idParam) RETURN b

谢谢@CaptEmulation,你的贡献给了我查看查询结果的提示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。