Я хотел создать модуль транзакции, в котором после успешной транзакции документ пользователя (в этом случае пользователь отправляет деньги другому пользователю) также будет обновлен.
а. в 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"
Почему возникает эта ошибка? Мне нужно ваше предложение, пожалуйста! Спасибо





Корень проблемы в том, как я определил свойство transaction_history. Синтаксически это должно было быть массивом объектов [{}], но потом я написал его тип как String. Поэтому, когда я пытался вставить строку как значение типа 'type', он выдает ошибку из-за невозможности передать строку в объект 'transaction_history'. Чтобы решить эту проблему, просто нужно удалить свойство типа. Моя ошибка использовать зарезервированное слово в качестве ключа в объекте, поэтому я заменил слово type на что-то другое в модели. это оно!
Вы не можете использовать слово «тип» как объект. Просто переименуйте его во что-нибудь другое, например, something_type.
вы можете, просто сделайте type:{type:<your type>} внутри схемы
В моем случае:
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, никогда не должны быть в схеме модели в качестве основных ключевых слов!
Вы передаете строку JSON,
"{ transactionid: '1amhrummxjhnhv0w4' }, а не только значение'1amhrummxjhnhv0w4'