首页 > 解决方案 > 通过 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)

我一直试图发现错误几个小时,但找不到它,谢谢大家的回复!如果有帮助,我很乐意发布更多代码或整个错误消息

标签: javascriptmongodbexpress

解决方案


经过多次反复试验,我找到了答案,原来 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')
  })
})

推荐阅读