前提・実現したいこと
- データベースからブログ記事を検索
- ブラウザに表示
Node.jsでブログを作ろうとしています。
フレームワーク: Express
データベース: MongoDB (スキーマ作成のためにmongoose)
テンプレートエンジン: ejs
問題は、
ブラウザにはきちんと記事が表示できているにも関わらず、
TypeErrorがコンソールに出力されてしまうことです。
みなさまの知恵をお借りしたいと思います、よろしくお願いします。
発生している問題・エラーメッセージ
TypeError: /home/vagrant/myblog/views/layout/article.ejs:10 8| <link rel="stylesheet" href="/styles/article.css" type="text/css"> 9| <link rel="stylesheet" href="/styles/footer.css" type="text/css"> >> 10| <title><%= article.title %></title> 11| <meta name="description" content="<%= article.description %> "> 12| </head> Cannot read properties of null (reading 'title')
該当のソースコード
javascript
1app.get('/:category/:slug', async (req, res) => { 2 const article = await ArticleDB.findOne({ slug: req.params.slug }).lean() 3 if (article == null) { 4 res.redirect('/') 5 } 6 JSON.stringify(article) 7 console.log(article) 8 res.render('./layout/article', { article: article }) 9}) 10
ejs
1<head> 2 <meta charset="UTF-8"> 3 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 4 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 5 <link rel="stylesheet" href="/styles/normalize.css" type="text/css"> 6 <link rel="stylesheet" href="/styles/article.css" type="text/css"> 7 <link rel="stylesheet" href="/styles/footer.css" type="text/css"> 8 <title><%= article.title %></title> 9 <meta name="description" content="<%= article.description %> "> 10</head> 11
試したこと
データベースから取り出したデータの中身を確認
結果は以下の通りで、欲しいデータを取得できているのですが、なぜか一番最後にnullがくっついています。
配列というわけでもないので、このnullだけを切り離すことができませんでした。
いったん文字列に変換して直接除去する方法も考えましたが、あまりスマートな方法ではないように思います。
article
1{ 2 _id: new ObjectId("619b20353704b5b57a7159ba"), 3 title: 'This is an article for SEO part 2', 4 category: 'SEO', 5 description: 'SEO is important. ', 6 markdown: '# title\r\n## subtitle ', 7 createdAt: 2021-11-23T15:45:36.204Z, 8 slug: 'this-is-an-article-for-seo-part-2', 9 sanitizedHtml: '<h1>title</h1>\n<h2 id="subtitle">subtitle</h2>\n', 10 __v: 0 11} 12null
データ型を確認
Object.prototype.toString.call(article)で記事データのデータ型を確認しました。
やはり、オブジェクト型とnullが一緒になって入っています。
[object Object] [object Null]
補足情報(FW/ツールのバージョンなど)
node.js: v16.13.0
express: express@4.17.1
mongoose: mongoose@6.0.12
MongoDB: 5.0.3
Ubuntu: 18.04.3 LTS
あなたの回答
tips
プレビュー