Что это за ошибка “Cannot read property ‘1’ of undefined” на Node JS? — Хабр Q&A

Почему возникает ошибка cannot read property ‘map’ of undefined?

const [users, setUsers] = useState({user:['user1', 'user2', 'user3']});

Здесь users это объект, единственное свойство которого является массивом.

setUsers(users.user.filter((item,i) => i !== index));

А здесь – массив.

const list = users.user.map(...

У этого массива вы пытаетесь прочитать свойство user, которого нет, получаете undefined, а дальше… Ну, сообщение об ошибке вы уже видели.

Вы бы определились, чем должен быть users.

Что это за ошибка "cannot read property ‘1’ of undefined" на node js?

Делаю игрового бота в вк и чтобы выводить лишние средства из проекта нужно сделать казино, но, я просто не понимаю почему не работает…

vk.updates.hear(/^(?:казино)s?(.*)?/i, async (message, args, bot, next) => {
	var id = await find(message.senderId);
	message.args[1] = message.args[1].replace(/(.|,)/ig, '');
	message.args[1] = message.args[1].replace(/(к|k)/ig, '000');
	message.args[1] = message.args[1].replace(/(м|m)/ig, '000000');

	if(!Number(message.args[1])) return;
	message.args[1] = Math.floor(Number(message.args[1]));

	if(message.args[1] <= 0) return;

	if(message.args[1] > users[id].balance) return message.send(`у вас нет данной суммы`);
	else if(message.args[1] <= users[id].balance)
	{
		users[id].balance -= message.args[1];
		const multiply = utils.pick([0.75, 0.75, 2, 0.75, 0.75, 0.5, 0.75, 0.75, 0.75, 0.75, 0.75, 0.25, 0.75, 0.75, 0.75, 2, 0.75, 5, 0.75, 0.5, 0.75, 0.75, 0.75, 0.75, 0.75, 0.25, 0.75, 2]);

		users[id].balancee  = Math.floor(message.args[1] * multiply);
		return message.send(`${['','', '', '', ''].random()} >> ${multiply === 1 ? `Ваши деньги остаются при вас!` : `${multiply < 1 ? `Вы проиграли ${utils.sp(message.args[1] * multiply)}₽` : `Вы выиграли ${utils.sp(message.args[1] * multiply)}₽`}`}
		❤ >> Сумма умножена в x${multiply}		
		 Ваш баланс: ${utils.sp(users[id].balance)}₽`);
	}
});

При вводе команды: казино “число” – выдаёт следующее:

5ece1bef20a6a175068184.jpeg

Возможно, ошибка супер очевидная… Но я изучаю js всего 2 дня, я просто не понимаю что это может быть! И дело не в английском языке 🙂 Не соврать бы, сижу уже часов 7 над этой командой, просто представьте сколько раз я ее переписал в доль и поперёк. И замечу, в другом боте работает, но у меня почему то нет… и у меня vk.updates.hear а в другом боте cmd.on, но до сих пор понять не могу почему так, ведь npm пакет один. vk-io. Спасибо!

Uncaught typeerror: cannot read property — что это означает – журнал «код» программирование без снобизма

Допустим, вы делаете страницу с формой и полем ввода:

<form name="myform">
<input name="myinput" value="10" />
</form>

Нужно, чтобы скрипт нашёл эту форму, достал из неё значение поля ввода и вывел его на экран. Вы пишете скрипт и оформляете его как отдельный файл, который подключаете в разделе head:

<script>
var str = '';
for(i=0; i < document.myform.elements.length; i ){
str = document.myform.elements[i].name
'=' encodeURIComponent(document.myform.elements[i].value)
(i == document.myform.elements.length -1 ? '' : '&');
}
alert(str);
</script>

Этот скрипт должен быть правильным. При тестировании внутри консоли он делает именно то, что нужно. Но после запуска скрипт падает с ошибкой:

❌ Uncaught TypeError: Cannot read property

Это означает: «Вы пытаетесь прочитать у объекта какое-то свойство, но я не могу его найти, а значит, не могу и прочитать то, чего нет».

Странно, ведь вы уверены, что у этого объекта такое свойство точно есть, и вы сто раз так уже делали.

Всё так и одновременно не так.

Эта ошибка чаще всего происходит, когда вы обращаетесь к свойствам объекта раньше, чем объект готов:

  • Скорее всего, объект ещё не загрузился.
  • Может быть, этот объект должен появиться на странице по скрипту, который ещё не выполнился.
  • Допущена опечатка в названии объекта, поэтому при обращении к нему скрипт его не находит.

Наш случай — первый и самый распространённый: мы вызываем скрипт в разделе <head>, но форма у нас ещё не готова — она банально не загружена в документ, поэтому скрипт не может прочитать свойства несуществующей формы.

Чтобы избавиться от этой ошибки, нужно добавить в вызов скрипта атрибут defer — он заставит скрипт подождать, пока страница загрузится полностью, вместе с формой.

<script defer src="...">

Второй вариант — поместить вызов скрипта сразу после формы, тогда к моменту вызова всё окажется на своих местах и ошибки не будет. Или вообще в конце всего документа.

Почему ошибка проекта:typeerror: cannot read property ‘filter’ of undefined? как исправить? может я что-то не так делаю?

Здраствуйте. Изучал React, и вот настал момент когда я начал делать свой первый сайт на реакте. Сказать что встретился с трудностями это ничего сказать. Самое сложное оказалось слепить все компоненты, все свои наработки, в один сайт. Хотя уже как-то потихоньку что-то да получается. Но появилась такая ошибка:

5d98ae15bcb45935306472.jpeg

Сразу извиняюсь что бросаю код не в песочнице, но подругому не могу так как почему-то песочницы ругаются на react-router:
Напишу только три главных файла проекта, они не очень большие.

App.js:

import React from "react";
import ReactDOM from 'react-dom';
import {BrowserRouter, Route, Link, Switch} from "react-router-dom";
import createBrowserHistory from "history/createBrowserHistory";
import './App.css';
import Header from "./smallComponents/Header.js";
import Footer from "./smallComponents/Footer.js";
import Home from "./pageComponents/Home.js";
import About from "./pageComponents/About.js";
import Contacts from "./pageComponents/Contacts.js";
import {carsArray} from "./pageComponents/Home.js";

const history = createBrowserHistory();

class App extends React.Component {
  render(){ 
    return (
      <BrowserRouter history={history}> 
         <div className="wrapper">
        
        <Header/>
        
        <Home attributeApp={carsArray} />
    
            <Switch>
              <Route exact path="/" component={Home} /> 
              <Route path="/about" component={About} />
              <Route path="/contacts" component={Contacts} />
            </Switch>
    
        <Footer/>          
        
       </div>
    </BrowserRouter>
   )
  }
}

export default App;

Home.js:

import React from "react";
import {BrowserRouter, Route, Link} from "react-router-dom";
import '../App.css';
import CarsList from "./CarsList.js";

let carsArray = [
{
    id:1,
    name: 'BMW',
    phone: '555 555 5555'
}, 
{
    id:2,
    name: 'Mercedes',
    phone: '555 111 5555'
},
{
    id:3,
    name: 'Audi',
    phone: '555 777 5555'
},
{
    id:4,
    name: 'Ford',
    phone: '555 888 5555'
}
]

class Home extends React.Component {
  render(){ 
    return (
       <CarsList attributeCarsList={this.props.attributeApp}/>
   );
  }
}

export default Home;
export {carsArray};

CarsList.js:

import React from 'react';
import Car from './Car';

class CarsList extends React.Component  {
    constructor() {
        super();
        this.state = {
           search: ""
        };
    }
    updateSearch(event) {
        this.setState({search:event.target.value.substr(0,100)})
    }
 
render(){
    let filterCars = this.props.attributeCarsList.filter(
        (contact) => {
            return contact.name.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1;
        }
        );
  return (
    <div>
      <input type="text" value={this.state.search} onChange={this.updateSearch.bind(this)}/>
      {filterCars.map((argumentMap)=>{
       return <Car attributeCar={argumentMap}/>
      })}
    </div>
  );
 }
}

export default CarsList;

а файл index.js просто рендерит в DOM компоент App.

Читайте также:  Закупки и тендеры без обеспечения

How to avoid ‘cannot read property of undefined’ errors?

Imagine that we want to apply a series of functions to x if and only if x is non-null:

if (x !== null) x = a(x);
if (x !== null) x = b(x);
if (x !== null) x = c(x);

Now let’s say that we need to do the same to y:

if (y !== null) y = a(y);
if (y !== null) y = b(y);
if (y !== null) y = c(y);

And the same to z:

if (z !== null) z = a(z);
if (z !== null) z = b(z);
if (z !== null) z = c(z);

As you can see without a proper abstraction, we’ll end up duplicating code over and over again. Such an abstraction already exists: the Maybe monad.

The Maybe monad holds both a value and a computational context:

  1. The monad keeps the value safe and applies functions to it.
  2. The computational context is a null check before applying a function.

A naive implementation would look like this:

⚠️ This implementation is for illustration purpose only! This is not how it should be done and is wrong at many levels. However this should give you a better idea of what I am talking about.

As you can see nothing can break:

  1. We apply a series of functions to our value
  2. If at any point, the value becomes null (or undefined) we just don’t apply any function anymore.

Appendix 1

I cannot explain what monads are as this is not the purpose of this post and there are people out there better at this than I am. However as Eric Elliot said in hist blog post JavaScript Monads Made Simple:

Regardless of your skill level or understanding of category theory, using monads makes your code easier to work with. Failing to take advantage of monads may make your code harder to work with (e.g., callback hell, nested conditional branches, more verbosity).


Appendix 2

Here’s how I’d solve your issue using the Maybe monad from monetjs

Invalidstateerror: an attempt was made to use an object that is not, or is no longer, usable

Связанные ошибки:

InvalidStateError, DOMException code 11

Javascript – как исправить ‘cannot read property’, включающий ‘undefined’ в nodejs? [script ] –

Я настраиваю новый сервер и хочу запустить скрипт nodejs для разногласий. Но проблема в том, он сообщает об ошибках после запуска / или запуска скрипта.

Я попытался связаться с «автором» без ответа на GitHub, чтобы исправить это, и я попытался протестировать на других серверах, которые я в сети, но он говорит ту же ошибку. (включая понижение версии nodejs / npm.)

Код, который я нашел, взят со страницы GitHub: https://github.com/Triniayo/nodejs -discord – csgoupdate

// Requirements
const { Client } = require('discord.js');
const fs = require('fs');
const Parser = require('rss-parser');
const htmlToText = require('html-to-text');
const log = require('npmlog');

// Load Config
const cfg = require('./config.json');

// Create feeder instance
let rssParser = new Parser({
    // Renaming 'content:encoded' to 'contentHtml' because it won't be useable otherwise
    customFields: {
        item: [
            ['content:encoded', 'contentHtml']
        ]
    },
    // Setting User Agent
    headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
    }
});

// Setting variables for the RSS output
let updateTitle;
let updateURL;
let updateContent;
let updateDate;

// Setting last update variable
let lastUpdate;

function getLastUpdate() {
    // Getting date of last update from check-update.txt file
    let dateFromFile = fs.readFileSync('check-update.txt');
    lastUpdate = dateFromFile.toString();
}

// Getting last date from check-update.txt file every 5 seconds
setInterval(getLastUpdate, 5000);

// Create Discord Bot Instance
const bot = new Client();

// Logging into Bot Account
bot.on('ready', () => {
    log.info('discord', `Logged in as ${bot.user.tag} (User ID: ${bot.user.id}) on ${bot.guilds.size} server(s)`);
    bot.user.setActivity('Fetching Updates');

    // Checking every 10 seconds if there's a new update, and if it's been posted already
    setInterval(getUpdate, 10000);
});

function getUpdate() {
    // Get current date and edit format
    let getDate = new Date();
    let date = [
        getDate.getFullYear(),
        ('0'   (getDate.getMonth()   1)).slice(-2),
        ('0'   getDate.getDate()).slice(-2)
    ].join('-');

    // Fetching updates from CS:GO Blog
    (async () => {
        // Setting RSS Feed URL
        let feed = await rssParser.parseURL('http://blog.counter-strike.net/index.php/category/updates/feed/');

        // Setting items into variables
        feed.items.forEach(item => {
            if (item.isoDate.includes(`${date}`)) {
                updateTitle = item.title;
                updateURL = item.link;
                updateContent = item.contentHtml;
                updateDate = item.isoDate;
            }
        });

        // Converting from HTML to readable text
        let format = htmlToText.fromString(updateContent, {
            wordwrap: 130
        });

        // Limiting the update to 10 lines
        let updateNotes = format.split('n', 10);

        if (updateDate.includes(`${date}`)) {
            if (lastUpdate !== date) {
                bot.channels.get(cfg.channelid).send("@everyone A new CS:GO Update has been released!", {
                    embed: {
                      "title": `${updateTitle}`,
                      "description": `${updateNotes.join('n')}...nn[Continue reading on the CS:GO Blog](${updateURL})`,
                      "url": `${updateURL}`,
                      "color": 5478908,
                      "thumbnail": {
                        "url": "https://raw.githubusercontent.com/Triniayo/nodejs-discord-csgoupdate/master/csgo-icon.png"
                      }
                    }
                });

                // Storing date of the latest update in the check-update.txt
                fs.writeFileSync('check-update.txt', `${date}`)
            }
        } else {
            // Do nothing if update has been posted already.
        }
    })();
}

// Logging into the Bot Account
bot.login(cfg.token);

Ниже приведена ошибка, которую я получаю после того, как обновил nodejs & npm до последней версии.

(node:23692) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'includes' of undefined
    at /home/mikkel/bots/csgo/app.js:87:24
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)
(node:23692) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 13)

Я не знаю, что эта ошибка означает, так как я noob to nodejs.

Читайте также:  Shumaher’s_Blog » Как восстановить подключение к сетевым дискам в Windows

Версия, npm / узел:

node: v8.16.1
npm: 6.12.0

Что я должен был изменить? У меня нет смысла javascript или nodejs. скрипт свободно лежит на GitHub.

Обновление: отредактировано 10.10.2009 – 15:28 . Что с форматом даты? – Пример; на github читаем из check-update.txt в следующем формате: 23.10.2008 (например)

Кажется, это не публикуется для меня на Discord. (что он должен делать, если он этого не делает)

Примере:

    // Checking every 10 seconds if there's a new update, and if it's been posted already
    setInterval(getUpdate, 10000);

Вот в чем проблема:

            // Do nothing if update has been posted already.
        }
    })();
}

Может мне стоит создать нового бота из разногласий разработчиков?

Выложенная вами ошибка гласит следующее:

(node:23692) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'includes' of undefined
    at /home/mikkel/bots/csgo/app.js:87:24
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)

В первой строке сообщения об ошибке говорится, что он пытается вызвать includes или получить свойство includes объекта, но этот объект не определен. Вторая строка сообщения об ошибке сообщает вам, где возникает проблема; строка 87 (и столбец 24).

Строка 87 гласит:

if (updateDate.includes(`${date}`)) {

Таким образом, объект updateDate должен быть как-то не определен. Просматривая, мы видим, что он установлен только в цикле forEach в строке 70, но в операторе if внутри этого цикла.

feed.items.forEach(item => {
    if (item.isoDate.includes(`${date}`)) {
        updateTitle = item.title;
        updateURL = item.link;
        updateContent = item.contentHtml;
        updateDate = item.isoDate;
    }
});

Если цикл никогда не запускается, то updateDate никогда не будет установлен. Если каждый элемент в цикле не содержит дату в свойстве isoDate, то updateDate никогда не будет установлен.

Поэтому мы должны остерегаться этих случаев.

Мы можем добавить условие, что updateDate был установлен на что-то, изменив строку 87 на это:

if (updateDate && updateDate.includes(`${date}`)) {

Uncaught rangeerror: maximum call stack size exceeded

Связанные ошибки:

Uncaught exception: RangeError: Maximum recursion depth exceeded, too much recursion, Stack overflow

Обычно вызвано неправильно программной логикой, что приводит к бесконечному вызову рекурсивной функции.

Как исправить ошибку: проверьте рекурсивные функции на ошибки, которые могут вынудить их делать рекурсивные вызовы вечно.

Uncaught referenceerror: invalid left-hand side in assignment

Связанные ошибки:

Uncaught exception: ReferenceError: Cannot assign to ‘functionCall()’, Uncaught exception: ReferenceError: Cannot assign to ‘this’

Вызвано попыткой присвоить значение тому, чему невозможно присвоить значение.

Наиболее частый пример этой ошибки — это условие в if:

if(doSomething() = 'somevalue')

В этом примере программист случайно использовал один знак равенства вместо двух. Выражение “left-hand side in assignment” относится к левой части знака равенства, а, как можно видеть в данном примере, левая часть содержит что-то, чему нельзя присвоить значение, что и приводит к ошибке.

Как исправить ошибку: убедитесь, что вы не пытаетесь присвоить значение результату функции или ключевому слову this.

Uncaught syntaxerror: unexpected token illegal

Связанные ошибки:

Unterminated String Literal, Invalid Line Terminator

В строковом литерале пропущена закрывающая кавычка.

Как исправить ошибку: убедитесь, что все строки имеют правильные закрывающие кавычки.

Uncaught typeerror: cannot read property ‘foo’ of null, uncaught typeerror: cannot read property ‘foo’ of undefined

Связанные ошибки:

TypeError: someVal is null, Unable to get property ‘foo’ of undefined or null reference

Попытка прочитать null или undefined так, как будто это объект. Например:

var someVal = null;
console.log(someVal.foo);

Как исправить ошибку:

Читайте также:  Обмен с органами казначейства: настройка и выгрузка – Учет без забот

обычно вызвано опечатками. Проверьте, все ли переменные, использованные рядом со строкой, указывающей на ошибку, правильно названы.

Uncaught typeerror: cannot set property ‘foo’ of null, uncaught typeerror: cannot set property ‘foo’ of undefined

Связанные ошибки:

TypeError: someVal is undefined, Unable to set property ‘foo’ of undefined or null reference

Попытка записать null или undefined так, как будто это объект. Например:

var someVal = null;
someVal.foo = 1;

Как исправить ошибку:

это тоже обычно вызвано ошибками. Проверьте имена переменных рядом со строкой, указывающей на ошибку.

Uncaught typeerror: converting circular structure to json

Связанные ошибки:

Uncaught exception: TypeError: JSON.stringify: Not an acyclic Object, TypeError: cyclic object value, Circular reference in value argument not supported

Всегда вызвано циклической ссылкой в объекте, которая потом передается в JSON.stringify.

var a = { };
var b = { a: a };
a.b = b;
JSON.stringify(a);

Так как

ab

в примере выше имеют ссылки друг на друга, результирующий объект не может быть приведен к JSON.

Как исправить ошибку: удалите циклические ссылки, как в примере выше, из всех объектов, которые вы хотите сконвертировать в JSON.

Uncaught typeerror: undefined is not a function

Связанные ошибки:

number is not a function, object is not a function, string is not a function, Unhandled Error: ‘foo’ is not a function, Function Expected

Возникает при попытке вызова значения как функции, когда значение функцией не является. Например:

var foo = undefined;
foo();


Эта ошибка обычно возникает, если вы пытаетесь вызвать функцию для объекта, но опечатались в названии.

var x = document.getElementByID('foo');

Несуществующие свойства объекта по-умолчанию имеют значение

undefined

, что приводит к этой ошибке.

Другие вариации, такие как “number is not a function” возникают при попытке вызвать число, как будто оно является функцией.

Как исправить ошибку: убедитесь в корректности имени функции. Для этой ошибки, номер строки обычно указывает в правильное место.

Uncaught urierror: uri malformed

Связанные ошибки:

URIError: malformed URI sequence

Вызвано некорректным вызовом decodeURIComponent.

Как исправить ошибку: убедитесь, что вызовы decodeURIComponent на строке ошибки получают корректные входные данные.

Unexpected token ;

Связанные ошибки:

Expected ), missing ) after argument list

Интерпретатор JavaScript что-то ожидал, но не обнаружил там этого. Обычно вызвано пропущенными фигурными, круглыми или квадратными скобками.

Токен в данной ошибке может быть разным — может быть написано “Unexpected token ]”, “Expected {” или что-то еще.

Как исправить ошибку: иногда номер строки не указывает на правильное местоположение, что затрудняет исправление ошибки.

Ошибка с [ ] { } ( ) обычно вызвано несовпадающей парой. Проверьте, все ли ваши скобки имеют закрывающую пару. В этом случае, номер строки обычно указывает на что-то другое, а не на проблемный символ.

Unexpected / связано с регулярными выражениями. Номер строки для данного случая обычно правильный.

Unexpected; обычно вызвано символом; внутри литерала объекта или массива, или списка аргументов вызова функции. Номер строки обычно также будет верным для данного случая.

Как читать ошибки?

Перед самим списком, давайте быстро взглянем на структуру сообщения об ошибке. Понимание структуры помогает понимать ошибки, и вы получите меньше проблем, если наткнетесь на ошибки, не представленные в этом списке.

Типичная ошибка из Chrome выглядит так:

Uncaught TypeError: undefined is not a function


Структура ошибки следующая:

  1. Uncaught TypeError: эта часть сообщения обычно не особо полезна. Uncaught значит, что ошибка не была перехвачена в catch, а TypeError — это название ошибки.
  2. undefined is not a function: это та самая часть про ошибку. В случае с сообщениями об ошибках, читать их нужно прямо буквально. Например, в этом случае, она значит то, что код попытался использовать значение undefined как функцию.

Другие webkit-браузеры, такие как Safari, выдают ошибки примерно в таком же формате, как и Chrome. Ошибки из Firefox похожи, но не всегда включают в себя первую часть, и последние версии Internet Explorer также выдают более простые ошибки, но в этом случае проще — не всегда значит лучше.

Теперь к самим ошибкам.

Заключение

JavaScript содержит в себе одни из самых бесполезных ошибок, которые я когда-либо видел, за исключением печально известной

Expected T_PAAMAYIM_NEKUDOTAYIM

в PHP. Большая ознакомленность с ошибками привносит больше ясности. Современные браузеры тоже помогают, так как больше не выдают абсолютно бесполезные ошибки, как это было раньше.

Какие самые непонятные ошибки вы встречали? Делитесь своими наблюдениями в комментариях.

P.S. Этот перевод можно улучшить, отправив PR здесь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector