'Cannot read properties of undefined (reading 'split'), and i want to do some tags options

<div class="row no-margin video-title">
    <h6><i class="fas fa-book"></i> Tags</h6>
</div>
<div class="image">
    <ul class="list-unstyled mb-0">
        <% 
            Tags = video.Tags.split(",");
            Tags.forEach (function (tag) {
            tag = tag.trim(); %>

            <li>
                <a href="/tag_search/<%= tag %>"><%= tag %></a>
            </li>

        <% }) %>
    </ul>
</div>

and I receive this error:

TypeError:
E:\livestreaming\video_streaming\views\video-page\index.ejs:374
    372|             
    373| 
 >> 374|             <%- include("side-bar") %>
    375|             
    376|         </div>
    377|     </div>

E:\livestreaming\video_streaming\views\video-page\side-bar.ejs:39
    37|     <div class="image">
    38|         <ul class="list-unstyled mb-0">
 >> 39|             <% 
    40|                 Tags = video.Tags.split(",");
    41|                 Tags.forEach (function (tag) {
    42|                 tag = tag.trim(); %>

Cannot read properties of undefined (reading 'split')
    at eval ("E:\\livestreaming\\video_streaming\\views\\video-page\\side-bar.ejs":47:35)
    at side-bar (E:\livestreaming\video_streaming\node_modules\ejs\lib\ejs.js:692:17)
    at include (E:\livestreaming\video_streaming\node_modules\ejs\lib\ejs.js:690:39)
    at eval ("E:\\livestreaming\\video_streaming\\views\\video-page\\index.ejs":101:17)
    at index (E:\livestreaming\video_streaming\node_modules\ejs\lib\ejs.js:692:17)
    at tryHandleCache (E:\livestreaming\video_streaming\node_modules\ejs\lib\ejs.js:272:36)
    at View.exports.renderFile [as engine] (E:\livestreaming\video_streaming\node_modules\ejs\lib\ejs.js:489:10)
    at View.render (E:\livestreaming\video_streaming\node_modules\express\lib\view.js:135:8)
    at tryRender (E:\livestreaming\video_streaming\node_modules\express\lib\application.js:640:10)
    at Function.render (E:\livestreaming\video_streaming\node_modules\express\lib\application.js:592:3)


Solution 1:[1]

You need to learn to read the error, Elon!

Cannot read properties of undefined (reading 'split')

It is clearly saying, a property named split is attempted to be accessed from an undefined value.

Now, all you have to do is, to check where you are using split in the part of the code that throws the error.

Then you will learn that, it is Tags = video.Tags.split(","); where, split is being used. That means, Tags property in video object is not defined.

Now, you simply need to ensure Tags is present in video object always & it must be a string.

Solution 2:[2]

This means that video.Tags stores an undefined value. Make sure to check if the video.Tags has a value before using the split() method. See code below:

var video = undefined;

// Cannot read properties of undefined (reading 'split')
video.split(',');

To check whether your string is undefined or not:

const video = undefined;

if (typeof video === 'string') {
  const array = video.split(',');
  // Do something ...
} else {
  console.log('video is not a string');
}

// You could also use method chaining.
const r = video?.split(','); 
console.log(r);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tamil Vendhan Kanagarasu
Solution 2 Marc Anthony B