首页 > 解决方案 > 无法创建新帖子 (API)

问题描述

我只能在一个用户名下创建一个用户帖子。因此,当我尝试从另一个用户名创建新帖子或以相同名称创建新帖子时,会显示此错误。

示例: > elaine 创建了一个新的第一个帖子。有效。但是当我尝试在他下面创建一个新帖子时,它不起作用,并收到错误消息。

{
    "index": 0,
    "code": 11000,
    "keyPattern": {
        "username": 1
    },
    "keyValue": {
        "username": "elaine"
    }
}

所以我尝试创建一个新用户并在该用户下创建一个新帖子,但我收到此错误 https://ibb.co/0yzSvb5

{
    "index": 0,
    "code": 11000,
    "keyPattern": {
        "email": 1
    },
    "keyValue": {
        "email": null
    }
}

post.js


const router = require('express').Router()

//I'm pulling the USER from models
const User = require('../Models/User')
const Post = require('../Models/Post')

//to unencrpt

//THIS IS CRUD
//CREATE POST -- PUT METHOD USE IN UPDATING  (/:id ) => user id
router.post('/', async (req, res) => {
  const newPost = new Post(req.body)
  try {
    const savedPost = await newPost.save()
    res.status(200).json(savedPost)
  } catch (err) {
    res.status(500).json(err)
  }
})



module.exports = router


PostSchema.js

const mongoose = require('mongoose')

const PostSchema = new mongoose.Schema(
  {
    title: {
      type: String,
      required: true,
      unique: true,
    },
    desc: {
      type: String,
      required: true,
    },
    photo: {
      type: String,
      required: false,
    },
    username: {
      type: String,
      required: true,
    },
    categories: {
      type: Array,
      required: false,
    },
  },
  { timestamps: true }
)

module.exports = mongoose.model('Post', PostSchema)

index.js

const express = require('express')
const app = express()
const port = 5000
const dotenv = require('dotenv')
const authRoute = require('./routes/auth')
const userRoute = require('./routes/users')
const postRoute = require('./routes/posts')
const mongoose = require('mongoose')

dotenv.config()
app.use(express.json())

mongoose
  .connect(process.env.MONGO_URL)
  .then(console.log('Connected'))
  .catch((err) => console.log(err))

//Calling auth route
app.use('/api/auth', authRoute)
app.use('/api/users', userRoute)
app.use('/api/posts', postRoute)

app.listen(port, () => {
  console.log(`Listening at http://localhost:${port}`)
})

userSchema.js

const mongoose = require('mongoose')

const UserSchema = new mongoose.Schema(
  {
    username: {
      type: String,
      required: true,
      unique: true,
    },
    email: {
      type: String,
      required: true,
      unique: true,
    },
    password: {
      type: String,
      required: true,
    },
    profilePic: {
      type: String,
      default: '',
    },
  },
  { timestamps: true }
)

module.exports = mongoose.model('User', UserSchema)

标签: javascriptnode.jsapiexpressmongoose

解决方案


此错误来自您的架构。您正在使用unique : true约束。因此 mongoose 无法获取相同的值数据。每次您需要添加不同的值。第二个选项是删除unique : true约束。例子 :

const mongoose = require('mongoose')

const UserSchema = new mongoose.Schema(
  {
    username: {
      type: String,
      required: true,
    },
    email: {
      type: String,
      required: true,
      unique: true,
    },
    password: {
      type: String,
      required: true,
    },
    profilePic: {
      type: String,
      default: '',
    },
  },
  { timestamps: true }
)

module.exports = mongoose.model('User', UserSchema)

推荐阅读