无法在 ejs 文件 (node.js) 中读取 null 的属性“名称”

Posted

技术标签:

【中文标题】无法在 ejs 文件 (node.js) 中读取 null 的属性“名称”【英文标题】:Cannot read property 'name' of null in ejs file (node.js ) 【发布时间】:2018-08-01 07:55:56 【问题描述】:

我正在使用 mongodb 创建一个 node.js Web 应用程序,其中 cmets 与帖子相关联。我收到一个错误“无法读取 null 的属性 'name'”。

TypeError: /home/ubuntu/workspace/YelpCamp/views/show.ejs:3
1| <% include partials/header %>
2| >> 
3| <h1><%= Post.name %></h1>
4| 
5| <img src="<%= Post.image %>">
6| 
Cannot read property 'name' of null

实际上这个错误是在为数据库做种之后发生的。这是我的表演路线代码-

app.get("/posts/:id", function(req, res)
    post.findById(req.params.id).populate("comments").exec(function(err, foundPost)
        if(err)
            console.log(err);
        
        else 
            res.render("show", Post : foundPost);
        
    );
);

这是我的 show.ejs 模板代码 -

<% include partials/header %>
<h1><%=Post.name%></h1>
<img src= "<%= Post.image%>" >
<p> <%= Post.description %> </p>
<% include partials/footer %>

我的帖子架构和评论架构代码 -

var postSchema = new mongoose.Schema(
name : String,
image : String,
description : String,
comments : [
        
            type : mongoose.Schema.Types.ObjectId,
            ref : "comment"
        
    ]
);

发布架构 -

var commentSchema = new mongoose.Schema(
text : String,
author : String
);
module.exports = mongoose.model("comment", commentSchema);

由于某种原因,当我尝试访问 show route 时出现错误并 我似乎无法弄清楚是什么原因造成的。

【问题讨论】:

【参考方案1】:

你可以试试这个Post[0].fieldname 因为Post 可以是数组。

<% include partials/header %>
<h1><%=Post[0].name%></h1>
<img src= "<%= Post[0].image%>" >
<p> <%= Post[0].description %> </p>
<% include partials/footer %>

【讨论】:

【参考方案2】:

这是因为您使用 cmets 填充了它。解决此问题的一种简单方法是通过进入 mongodb shell 来删除集合。

您可以通过在终端中输入 mongo 进入 mongoDB Shell

然后前往您存储 cmets 的数据库

use camp_ground

在您的情况下,名称会有所不同。

你的收藏可以通过运行这个命令show collections来查看

在该集合列表中,只需查看您之前创建的带有“cmets”的名称

运行此命令db.comments.drop()删除此集合

你应该得到

是的

Refer to this image

【讨论】:

【参考方案3】:

我的错误是因为我还没有启动 mongodb 服务器。一旦我通过在 cmd 中输入命令“mongod”来启动 mongo 服务器。它工作正常。

【讨论】:

【参考方案4】:

我遇到了同样的错误,只需重新启动您的服务器,当您遇到该错误时,只需按 chrome 上的后页按钮并在那里刷新。你不会再面对它了。

【讨论】:

以上是关于无法在 ejs 文件 (node.js) 中读取 null 的属性“名称”的主要内容,如果未能解决你的问题,请参考以下文章

无法读取 Node JS 中未定义的属性“名称”

使用 Node.JS、Express 和 EJS 实现 browserify 的示例

无法让样式表与 node.js 的 ejs 一起使用

如何在 Node.js 和 Express 上的同一个 .ejs 文件上呈现 MySQL 查询的多个结果?

Node JS+Express:如何在 HTML(EJS) 中定义和使用 MySQL 数据?

将 .css 文件添加到 ejs