首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJs MonogoDb: NodeJs不保存更改

NodeJs MonogoDb: NodeJs不保存更改
EN

Stack Overflow用户
提问于 2021-05-03 00:13:11
回答 1查看 50关注 0票数 0

来自findOneAndUpdate()的更新后的结果在控制台中作为请求主体返回,但是更改不会从我的前端或邮递员中保存。我已经尝试了相当多的变化,但我没有任何进展。不知道下一步该怎么走。我已经做了相当多的阅读,但遗憾的是没有结果。

useRoutes.js

代码语言:javascript
复制
require("dotenv").config();

const express = require("express");
const router = express.Router({ mergeParams: true });
const jwt = require("jsonwebtoken");
const bcryptjs = require("bcryptjs");
const cookieParser = require('cookie-parser'); 
const { check, validationResult } = require("express-validator");

const User = require("../models/userSchema");

const ObjectID = require('mongodb').ObjectID;

function asyncHandler(callback) {
  return async (req, res, next) => {
    try {
      await callback(req, res, next);
    } catch (error) {
      next(error);
      console.log(error);
    }
  };
}

//updates user account
router.patch("/user/:id",[
    check("firstName")
      .exists({ checkNull: true, checkFalsy: true })
      .withMessage('Please provide a value for "firstName"'),
    check("lastName")
      .exists({ checkNull: true, checkFalsy: true })
      .withMessage('Please provide a value for "username"'),
    check("sexualPreference")
      .exists({ checkNull: true, checkFalsy: true })
      .withMessage('Please provide a value for "sexualPreference"'),
    check("description")
      .exists({ checkNull: true, checkFalsy: true })
      .withMessage('Please provide a value for "description"'),
  ],
  asyncHandler(async (req, res, next) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      const errorMessages = errors.array().map((error) => error.msg);
      return res.status(400).json({ errors: errorMessages });
    }

    const updateObject = req.body;

    console.log(req.params.id)

    await User.findOneAndUpdate({ _id: new ObjectID(req.params.id) },{ updateObject }, { new: true }, function(err, doc) {
      if(err) {
          return res.json({success: false, message: err.message});
      }
      console.log(updateObject);
      res.json({ updateObject });

      return res.status(204).end();
    });

  })
);

userSchema.js

代码语言:javascript
复制
const mongoose = require('mongoose');

const userSchema = mongoose.Schema( {

    firstName:{
        type: String,
        required: true 
    },
    lastName: {
        type: String,
        require: true
    },
    emailAddress: {
        type: String,
        require: true
    },
    password:{
        type: String,
        required: true 
    },
   gender:{
        type: String,
        required: true 
    },
    sexualPreference: {
        type: String,
        required: true 
    },
    age: {
        type: Number,
        required: true 
    },
    description: {
        type: String,
        required: true 
    },
    pictures: {
        type: [{
            Object
        }],
    },
    matches: {
        type: [{
            Object
        }],
    },
})

module.exports = mongoose.model('User', userSchema);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-03 00:38:50

只需将updateObject原样传递给findOneAndUpdate()函数,而不是将其包装在另一个对象中。

代码语言:javascript
复制
await User.findOneAndUpdate({ _id: new ObjectID(req.params.id) }, updateObject, //...)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67358555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档