mongoose.save() 未保存所有字段

mongoose.save() not saving all fields

我是节点和表达的新手,所以这可能不清楚

我正在使用 mongodb 制作一个迷你 Twitter 克隆。 当您提交推文(在我的应用程序中称为 mew)时,它会发出 post 请求。即使数据正在保存,它只保存 __v _id 和时间戳

我试过的东西

  1. 清空我的collection
  2. 使用普通字符设置类型
  3. 不同的浏览器
  4. 删除时间戳
  5. XHR 而不是获取

我的代码

后端:

const express = require("express");
const cors = require("cors");
const { log } = console;
const mongoose = require("mongoose");
const app = express();
app.use(cors());
app.use(express.json());

const uri =
  "mongodb+srv://***:***@twitter-ci8qa.gcp.mongodb.net/twitter?retryWrites=true&w=majority";
mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true });
var Schema = mongoose.Schema;

var postSchema = new Schema(
  {
    name: String,
    content: String,
  },
  {
    timestamps: true,
  }
);
var p = [];
var Post = mongoose.model("Post", postSchema);
const { connection } = mongoose;
connection.on("open", () => log("MongoDB: Connected"));
function isValidMew(mew) {
  return (
    mew.name &&
    mew.name.toString().trim() !== "" &&
    mew.content &&
    mew.content.toString().trim !== ""
  );
}

app.get("/", (req, res) => {
  Post.find().then((p) => {
    old = p;
    res.json(p);
  });
});
app.post("/mews", (req, res) => {
  if (isValidMew(req.body)) {
    const newMew = {
      name: req.body.name.toString(),
      content: req.body.content.toString(),
    };
    p = [...p, newMew];
    log(p);
    var postCollection = new Post(p);
    postCollection.markModified("twitter.posts");
    postCollection.save((err) => {
      if (err) {
        log(err);
      } else {
        console.log("worked");
      }
    });
  } else {
    res.status(500);
    res.json({
      err: "invalid request",
    });
  }
});
app.listen(7777, () => {
  log("listening");
});

前端:

const form = document.querySelector(".form");
const loading = document.querySelector(".loading");
const API_URL = "http://localhost:7777/mews";
loading.style.display = "none";
form.addEventListener("submit", (e) => {
  e.preventDefault();
  const formdata = new FormData(form);
  const name = formdata.get("name");
  const content = formdata.get("content");
  const mew = {
    name,
    content,
  };
  loading.style.display = "";
  form.style.display = "none";
  fetch(API_URL, {
    method: "POST",
    body: JSON.stringify(mew),
    headers: {
      "content-type": "application/json",
    },
  });

  fetch("http://localhost:7777/")
    .then((res) => res.json())
    .then((data) => alert(JSON.stringify(data)));
  form.style.display = "initial";
  loading.style.display = "none";
});

问题是您没有将新的 Post-object 传递给 /mews-handler 中的 Post-Model,而是传递了一个数组将 p 数组与 newMew 一起传播,从而创建一个新数组。所以将其更改为:

...
const newMew = {
      name: req.body.name.toString(),
      content: req.body.content.toString(),
    };
   
log(newMew);
const postCollection = new Post(newMew);
...

应该可以解决问题。