javascript - 通过 express.sj 将数据插入 mongodb 时转换为数组失败
问题描述
我正在使用 MERN 堆栈制作一个网站,我已经设法将来自表单的数据插入到反应前端到 mongodb 但是当我创建一个新表单时,我得到一个强制转换为数组失败的错误。我尝试在我的 mongroose 模型中投射到另一个数组,效果很好。系统为模拟网上银行,不用于任何生产环境
我的模型:
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const Schema = mongoose.Schema;
// Creates the needed schema
let userSchema = new Schema({
name: String,
created_at: Date,
updated_at: Date,
balance: Number,
address: String,
ssn: Number,
bankNumber: Number,
cards: [
{
type: String, // Visa eller Mastercard
cardNumber: Number,
cvc: Number,
expirationDate: Number,
pin: Number,
status: Boolean,
dailyLimit: '9900'
}
],
whitdrawal: [
{
amount: Number,
date: Date, // Skriv auto date logikk
reason: String
}
]
});
// Inserts
userSchema.pre('save', function(next) {
const currentDate = new Date();
this.updated_at = currentDate;
this.date = currentDate;
if (!this.created_at) this.created_at = currentDate;
next();
});
// Creates model for schema
const AtmUser = mongoose.model('AtmUser', userSchema);
// Export so it is available for the rest of the application
module.exports = AtmUser;
保存此数据的快速方法,数据从前端发送并在终端错误消息中可见
app.post('/api/newUser', function(req) {
const newUser = AtmUser({
name: req.body.name,
balance: req.body.balance,
address: req.body.address,
ssn: req.body.ssn,
bankNumber: req.body.bankNumber,
cards: [
{
type: req.body.type, // Visa eller Mastercard
cardNumber: req.body.cardNumber,
cvc: req.body.cvc,
expirationDate: req.body.expirationDate,
pin: req.body.pin,
}
],
});
newUser.save(function(err) {
if(err) throw err;
console.log('A new user has been made')
})
})
当尝试投射到 whitdrawal 数组而不是卡片数组时,一切都按预期工作,我在终端中收到的部分错误消息
events.js:167
[0] throw er; // Unhandled 'error' event
[0] ^
[0] ValidationError: AtmUser validation failed: cards: Cast to Array failed for value "[ { type: '234234234' } ]" at path "cards"
[0] at new ValidationError (/Users/andreas/Documents/prosjekt/atm/node_modules/mongoose/lib/error/validation.js:30:11)
我一直试图发现错误几个小时,但找不到它,谢谢大家的回复!如果有帮助,我很乐意发布更多代码或整个错误消息
解决方案
经过多次反复试验,我找到了答案,原来 type 是保留字,将其更改为 formType og Type 解决了我模型中的问题。
修正模型:
app.post('/api/newUser', function(req) {
const newUser = AtmUser({
name: req.body.name,
balance: req.body.balance,
address: req.body.address,
ssn: req.body.ssn,
bankNumber: req.body.bankNumber,
cards: [
{
formType: req.body.type, // Visa eller Mastercard
cardNumber: req.body.cardNumber,
cvc: req.body.cvc,
expirationDate: req.body.expirationDate,
pin: req.body.pin,
}
],
});
newUser.save(function(err) {
if(err) throw err;
console.log('A new user has been made')
})
})
推荐阅读
- android - 防止在按 KEYCODE_VOICE_ASSIST 时在 Google Pixel 中弹出 Google Assistant
- arrays - Bash 我不能打印数组的所有元素,只能打印最后一个
- c# - HTML 中的更改未反映在浏览器中
- cryptography - 恒定输入如何影响问题的 SAT 公式?
- php - 滚模程序 php
- xslt - XSLT 将属性从节点转换为另一个节点的元素并将它们从源节点中删除
- html - 覆盖下的文字不显示
- mysql - mysql中两个相同表之间的区别
- linux - 授予权限后无法导航到 Ubuntu 中的 /opt/lampp/htdocs
- sql - 三个日期之间的 SQL 查询