数据未使用 NodeJS、ExpressJS 和 EJS 保存到 MongoDB 数据库

Posted

技术标签:

【中文标题】数据未使用 NodeJS、ExpressJS 和 EJS 保存到 MongoDB 数据库【英文标题】:Data not saving to the MongoDB database using NodeJS, ExpressJS and EJS 【发布时间】:2021-12-18 01:18:39 【问题描述】:

我正在使用 ExpressJS mongoose 和 EJS 在 NodeJS 中创建一个日托管理 Web 应用程序。有一个模块可以添加参与者,另一个模块可以跟踪参与者每天的四次用餐次数。我将参与者模式引用到出勤模式。参与者集合在出勤页面上显示良好,但是当我向出勤模式发送发布请求时,它并没有传递到数据库。因为我是新人,所以我找不到我的错误。任何人都可以帮我解决我犯的错误吗?

架构:

const mongoose = require('mongoose')

const attendanceSchema = new mongoose.Schema(
    _id: 
        type: String,
        required: [true, 'Id is required']
    ,
    mDate: 
        type: Date,
        unique: true,
        default:  Date.now,
        required: [true, 'Date is required'],
        aMeal: 
            Breakfast: 
                type: String,
                default: ''
            ,
            Lunch: 
                type: String,
                default: ''
            ,
            pmSnacks: 
                type: String,
                default: ''
            ,
            Dinner: 
                type: String,
                default: ''
            
        
    ,
    participant: 
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'Participant'
    
,  timestamps: true )

module.exports = mongoose.model('Attendance', attendanceSchema)

路线

const express = require('express')
const router = express.Router()
const Participant = require('../models/participants/new')
const Attendance = require('../models/attendance/new')

router.get('/', async (req, res) => 
    showattendance(res, new Attendance())
)

router.post('/', async (req, res) => 
    const attendance = new Attendance(
        pId: req.body.pId,
        Breakfast: req.body.Breakfast,
        Lunch: req.body.Lunch,
        PmSnacks: req.body.PmSnacks,
        Dinner: req.body.Dinner
    )
    try 
        const newAttendance = await attendance.save()
        res.redirect(`attendance`)
     catch 
        showattendance(res, attendance, true)
    
)

async function showattendance (res, attendance, hasError = false)
    try 
        const participants = await Participant.find().sort( createdAt: 'desc' )
        const params = 
            participants: participants,
            attendance: attendance
        
        if (hasError) params.Msg = 'Error updating attendance'
        res.render('attendance', params)
     catch 
        res.redirect('/')
    


module.exports = router

查看

<% if (participants.lenth !== 0)  participants.forEach(participant =>  %>
    <div  class="flex bg-light">
        <div class="flex w-55 bt-white-1">
            <div class="w-20 p-5-10 br-white-1"><a href="/participant/edit"><%= participant._id %></a></div>
            <div class="w-35 p-5-10 br-white-1"><%= participant.fName %> <%= participant.lName %></div>
            <div class="w-15 p-5-10 br-white-1"><%= participant.Schedule %></div>
            <div class="w-30 p-5-10 br-white-1"><%= participant.Grade %></div>
        </div>
        <input type="hidden" name="pId" value="<%= participant._id %>">
        <div class="flex w-45 bt-white-1 text-center">
            <div class="w-25 p-5-10 br-white-1">
                <label for="Breakfast">
                    <% if (participant._id === attendance.participant && attendance.mDate.aMeal.Breakfast === 'Yes' )  %>
                        <input type="checkbox" checked value="Yes" onChange=countChecked() name="Breakfast">
                    <%  else  %>
                        <input type="checkbox" value="Yes" onChange=countChecked() name="Breakfast">
                    <%  %>
                 </label>
             </div>
             <div class="w-25 p-5-10 br-white-1">
                 ...
             </div>
         </div>
     </div>
<% ) else  %>
    <div class="bg-theme">
        <h1 class="text-white text-center m-0">No record found!</h1>
    </div>
<%  %>

【问题讨论】:

【参考方案1】:

添加

app.use(express.json()) 

app.use(express.urlencoded(extended:false)); 

你定义快递的地方

【讨论】:

我已经将它们添加到我的 server.js 文件中 现在检查你从前端获取的数据 我之前已经将它们添加到我的 server.js 文件中。我在别的地方搞砸了。 在你的post route中你能得到req.body吗? 是的,我已经登录到控制台i.postimg.cc/kMSY9t5Y/Screenshot-2021-11-04-035003.png

以上是关于数据未使用 NodeJS、ExpressJS 和 EJS 保存到 MongoDB 数据库的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 NodeJS/ExpressJS 和 Postman 获取 POST 数据

Expressjs Mongoose 发现嵌套的嵌入文档未定义

Nodejs,expressjs - 如何提供延迟响应

使用 NodeJS 在 mysql 中未正确保存日期(比实际日期少一天)

通过 NodeJS 获取 JSON 数据时,如何通过 ExpressJS 更新我的 EJS 模板?

使用 nodejs 和 expressjs 的 flash 套接字策略