前提・実現したいこと
- データベースからブログ記事を検索
- ブラウザに表示
Node.jsでブログを作ろうとしています。
フレームワーク: Express
データベース: MongoDB (スキーマ作成のためにmongoose)
テンプレートエンジン: ejs
問題は、
ブラウザにはきちんと記事が表示できているにも関わらず、
TypeErrorがコンソールに出力されてしまうことです。
みなさまの知恵をお借りしたいと思います、よろしくお願いします。
発生している問題・エラーメッセージ
JS
1TypeError: /home/vagrant/myblog/views/layout/article.ejs:10 2 8| <link rel="stylesheet" href="/styles/article.css" type="text/css"> 3 9| <link rel="stylesheet" href="/styles/footer.css" type="text/css"> 4 >> 10| <title><%= article.title %></title> 5 11| <meta name="description" content="<%= article.description %> "> 6 12| </head> 7 8Cannot read properties of null (reading 'title')
該当のソースコード
app.get('/:category/:slug', async (req, res) => { const article = await ArticleDB.findOne({ slug: req.params.slug }).lean() if (article == null) { res.redirect('/') } JSON.stringify(article) console.log(article) res.render('./layout/article', { article: article }) })
該当のソースコード
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="/styles/normalize.css" type="text/css"> <link rel="stylesheet" href="/styles/article.css" type="text/css"> <link rel="stylesheet" href="/styles/footer.css" type="text/css"> <title><%= article.title %></title> <meta name="description" content="<%= article.description %> "> </head>
試したこと
データベースから取り出したデータの中身を確認
結果は以下の通りで、欲しいデータを取得できているのですが、なぜか一番最後に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
プレビュー