簡體   English   中英

MongoDB 沒有 Express 服務器重啟不保存

[英]MongoDB does not save without Express server restart

我正在 MERN 堆棧中開發問卷 - 每頁一個問題(例如,一頁上的“指定名稱”,單擊下一個問題,另一頁上的“指定公司名稱”等),大約 40 頁。

單擊“下一步”時,應用程序將用戶的答案保存在 localStorage 中,從 localStorage 中檢索並將 axios.post 發送到 express 服務器,后者通過 uuid 找到 MongoDB 文檔並使用新答案更新它。

問題是不是所有的答案都保存在MongoDB中。在一些問題之后答案停止保存到MongoDB。只有當我重新啟動快遞服務器並再次嘗試回答問題時,它才會將其保存到MongoDB。

我不知道出了什么問題。 歡迎任何建議

這是一個代碼示例:

//React:
import { useState } from "react";
import axios from "axios";
import { useHistory } from "react-router-dom";
import NextQuestion from "./NextQuestion";

export default function Question1() {
  const history = useHistory();
  const [input, setInput] = useState("");

  function handleChange(e) {
    setInput(e.target.value);
  }

  function handleSubmit(e) {
    e.preventDefault();
    localStorage.setItem("name", input);

    const data = {
      uuid: localStorage.getItem("uuid"),
      name: localStorage.getItem("name"),
    };

    axios.post("/answers", data);

    history.push("/next-question");
  }

  return (
    <BrowserRouter>
      <Route path="/question-1">
        <form>
          <input id="name" type="text" value={value} onChange={handleChange} />
          <label for="#name">Please specify your name</label>
          <button onClick={handleSubmit}>NEXT QUESTION</button>
        </form>
      </Route>
      <Switch>
        <Route path="/next-question">
          <NextQuestion />
        </Route>
      </Switch>
    </BrowserRouter>
  );
}

//Express server:
require("dotenv").config();
const express = require("express");
const app = express();
const cors = require("cors");
const mongoose = require("mongoose");

app.use(express.json());
app.use(cors());

mongoose.connect(process.env.MONGO_URI);

const answerSchema = {
  uuid: String,
  name: String,
  company: String,
  title: String,
  email: String,
  phone: String,
};

const Answer = mongoose.model("Answer", answerSchema);

app.post("/answers", (req, res) => {
  if (req.body.uuid) {
    Answer.updateOne(
      { uuid: req.body.uuid },
      {
        name: req.body.name,
        company: req.body.company,
        title: req.body.title,
        email: req.body.email,
        phone: req.body.phone,
      },
      {
        upsert: true,
      }
    )
      .then((item) => console.log(item))
      .catch((err) => res.status(400).json("Error " + err));
  } else {
    const newAnswer = new Answer({
      uuid: req.body.uuid,
      name: req.body.name,
      company: req.body.company,
      title: req.body.title,
      email: req.body.email,
      phone: req.body.phone,
    });

    newAnswer
      .save()
      .then((item) => console.log(item))
      .catch((err) => res.status(400).json("Error " + err));
  }
});

app.listen(3001, function () {
  console.log("Express is running");
});

原始答案: 如何更新/更新 Mongoose 中的文檔?

請務必注明出處為原受訪者


Mongoose 現在通過findOneAndUpdate (調用 MongoDB findAndModify )原生支持此功能。

{ upsert: true }選項創建 object(如果它不存在)。 默認為假

var query = {'username': req.user.username};
req.newData.username = req.user.username;

MyModel.findOneAndUpdate(query, req.newData, {upsert: true}, function(err, doc) {
    if (err) return res.send(500, {error: err});
    return res.send('Succesfully saved.');
});

在舊版本 Mongoose 中不支持使用此方法的這些掛鈎:

  • 默認值
  • 二傳手
  • 驗證者
  • 中間件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM