我想创建一个交易模块,在成功交易后,用户文档(在这种情况下,用户向另一个用户汇款)也将被更新。
一个。在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.log("error at sender side");}
else
if(sendfrom!=null){
// console.log("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.log("sender's current balance is: "+sendfrom.balance);
};
});
}});
℃。但后来我明白了:
events.js:163
throw er; // Unhandled 'error' event
^
CastError: Cast to string failed for value "{ transactionid: '1amhrummxjhnhv0w4' }" at path "transaction_history"
为什么会出现这种错误?我想要你的建议!谢谢
答案 0 :(得分:1)
问题的根源在于我定义的transaction_history属性。这应该是语法[{}]的对象数组,但后来我把它的类型写成了String。因此,当我尝试将字符串作为'type'的值插入时,它会抛出错误,无法将字符串推送到'transaction_history'对象。要解决它,只需要删除type属性。使用保留字作为对象中的键是我的错误。所以我用模型中的其他东西替换了'type'。而已!
答案 1 :(得分:1)
您不能将“类型”一词用作对象。只需重命名为诸如“ something_type”之类的名称即可。
答案 2 :(得分:1)
就我而言:
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
之类的词不必在模型模式中作为主要关键字!