提问者:小点点

属性未提交到MongoDB(MERN堆栈)


我正在开发一个评估学生代数1水平的应用程序。我试图将一个名为“Answers”的字符串发送到数据库,但是什么也没有发送。我在下面展示了模型/模式,基本上每个提交都应该发送答案字符串(它最初是一个对象,但是我无法获得Mongoose非持久化对象的答案,所以我只是尝试一个字符串,看看它是否提交了一个字符串。用户和日期被提交到数据库,但甚至没有一个用于answers属性的条目。我已经看到,如果我提交“2”,发送的有效负载是{“results”:“2”},所以请求主体中有一些东西。我从服务器返回的响应是{},所以我认为我没有正确地销毁一个道具,或者可能是无意中发送了一个对象。关于为什么没有answers属性被提交到数据库有什么想法吗?如有任何帮助,不胜感激!

api/algebra1.js(发送测试结果的路由)

const express = require('express');
const router = express.Router();
var bodyParser = require('body-parser')
const bcrypt = require('bcryptjs');
const algebra1 = require('../../models/Algebra1');
const jwt = require('jsonwebtoken');
const config = require('config');
const auth = require('../../middleware/auth');

//@route POST api/auth
//@desc Algebra 1 route
//@access Private
var jsonParser = bodyParser.json();

router.post('/', [jsonParser, auth], async (req, res) => {
  const { answers } = req.body;
  try {
    let newTest = new algebra1({
      answers: answers,
      user: req.user.id,
      date: Date.now()
    })
    console.log("body is " + req.body)
    await newTest.save();
    res.json({ answers: answers });

  } catch (err) {
    console.error(err.message);
    res.status(500).send('Server error');
  }
})

module.exports = router;

代数1.js(猫鼬模型):

const mongoose = require('mongoose');

const Algebra1Schema = new mongoose.Schema({
  answers: {
    type: String
  },
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'user'
  },

  date: {
    type: Date,
    default: Date.now
  }
})

module.exports = algebra1 = mongoose.model('algebra1', Algebra1Schema)

提交操作(将结果提交到API/Algebra1路由):

export const submit = (results) => async dispatch => {
  try {
    const config = {
      headers: {
        'Content-Type': 'application/json'
      }
    }
    console.log(results);
    const body = JSON.stringify({ results });

    const res = await axios.post('/api/algebra1', body, config);

    dispatch({
      type: QuestionActionTypes.RESET
    })

    dispatch(setAlert('You\;ve finished your assessment!', 'success'));


  } catch (err) {

    console.error(err.message);
   
  }
}

共1个答案

匿名用户

您正在使用results键发送数据,并以answer键进行析构。你要把任何反对应答键的东西发到哪里去?我猜你是想把结果作为答案来提交。

const body = JSON.stringify({ results });