CastError: преобразование в строку не удалось для значения

Я хотел создать модуль транзакции, в котором после успешной транзакции документ пользователя (в этом случае пользователь отправляет деньги другому пользователю) также будет обновлен.

а. в user.js (это модель пользователя), помимо имени, pw, электронной почты и т. д., я создал это свойство, которое будет содержать историю транзакций соответствующего пользователя. Посмотрите, как я его использовал:

transaction_history:[{
            transactionid:String,
            timestamp:String,
            type:String,
            balance:Number,
            status:String

        }]

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

//create transaction document, works fine
Transaction.create({transactionid:uniqid(),
                timestamp:moment().format(datemask),
                amount:balance,
                sender:sendfrom,
                receiver:sendto,
                status:"done"
}, function(err, tr){
    if (err) throw err;
    else {

        //I want sender document to update with transaction info
        User.findOne({email:sendfrom}, function(err, sendfrom){
            if (err) {console.info("error at sender side");}
            else 
            if (sendfrom!=null){
                // console.info("tr: "+tr); //fine
                sendfrom.balance-=balance;
                sendfrom.transaction_history.push({

                     transactionid:tr.transactionid, 


                    // timestamp:tr.timestamp,
                    // type:"debit",
                    // balance:tr.amount,
                    // status:tr.status 

                }
                );
                sendfrom.save();
                console.info("sender's current balance is: "+sendfrom.balance);


            };
            });
            }});

c. Но потом я получаю следующее:

events.js:163
  throw er; // Unhandled 'error' event
  ^
CastError: Cast to string failed for value "{ transactionid: '1amhrummxjhnhv0w4' }" at path "transaction_history"

Почему возникает эта ошибка? Мне нужно ваше предложение, пожалуйста! Спасибо

Вы передаете строку JSON, "{ transactionid: '1amhrummxjhnhv0w4' }, а не только значение '1amhrummxjhnhv0w4'

Neil Lunn 27.05.2018 07:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
5 956
3

Ответы 3

Корень проблемы в том, как я определил свойство transaction_history. Синтаксически это должно было быть массивом объектов [{}], но потом я написал его тип как String. Поэтому, когда я пытался вставить строку как значение типа 'type', он выдает ошибку из-за невозможности передать строку в объект 'transaction_history'. Чтобы решить эту проблему, просто нужно удалить свойство типа. Моя ошибка использовать зарезервированное слово в качестве ключа в объекте, поэтому я заменил слово type на что-то другое в модели. это оно!

Вы не можете использовать слово «тип» как объект. Просто переименуйте его во что-нибудь другое, например, something_type.

вы можете, просто сделайте type:{type:<your type>} внутри схемы

adir abargil 04.03.2021 12:23

В моем случае:

CastError: Cast to String failed for value "[ 'whateverValue_1', 'whateverValue_2' ]" at path "name"

Проблема заключалась в том, что у меня в форме html имя то же слово ...

То есть:

<input name = "name"> Name 
<input city = "name"> City

В поисках своей ошибки я оставляю вам других, которые могли бы помочь новичкам, такие как я:

такие слова, как type, model, никогда не должны быть в схеме модели в качестве основных ключевых слов!

Другие вопросы по теме