javascript - 尽管给出了字段输入,但 Postman 上的验证错误

标签 javascript node.js express mongoose api-design

正在制作 RESTful API 并且按预期工作。我正在使用 postman 和 mongodb,并提出了解决问题的请求。 但现在只有删除和获取请求有效,更新和创建请求返回这些“字段是必需的”,尽管它们不为空。 在我添加路由器之前,这工作正常。

const express = require("express");
require("./db/conn");
const Student = require("./models/students");
const studentRouter = require("./routers/stds");

// Environment Variables
const app = express();
const port = process.env.PORT || 8000;

// Calling Router
app.use(studentRouter);

// Middleware
app.use(express.json());

// Listening to port 
app.listen(port, () => {
  console.log(`Connection at ${port}`);
});

// Creating Router
const express = require("express");
const router = new express.Router();
const Student = require("../models/students");

// Creating URLs
router.get("/", (req, res) => {
  res.send("Hello World");
});

// Creating data
router.post("/students", async (req, res) => {
  try {
    const user = new Student(req.body);
    const createUser = await user.save();
    console.log(createUser);
    res.status(201).send(createUser);
  } catch (e) {
    res.status(400).send(e);
  }
});

// Reading data
router.get("/students", async (req, res) => {
  try {
    const studentsData = await Student.find();
    if (!studentsData) {
      return res.status(404).send();
    } else {
      res.send(studentsData);
    }
  } catch (e) {
    res.send(e);
  }
});

// Reading data using IDs
router.get("/students/:id", async (req, res) => {
  try {
    const _id = await req.params.id;
    const studentData = await Student.find({ _id });
    res.send(studentData);
  } catch (e) {
    res.status(500).send(e);
  }
});

// Update Student's Data by ID
router.patch("/students/:id", async (req, res) => {
  try {
    const _id = req.params.id;
    const updateStudents = await Student.findByIdAndUpdate({ _id },
      req.body,
      {
        new: true
      });
    res.send(updateStudents);
  } catch (e) {
    res.status(400).send(e);
  }
});

// Delete Student's Data by I
router.delete("/students/:id", async (req, res) => {
  try {
    const id = req.params.id;
    const deleteStudent = await Student.findByIdAndDelete({ id });
    if (!id) {
      return res.status(400).send();
    }
    else {
      res.send(deleteStudent);
    }
  } catch (e) {
    res.status(500).send(e);
  }
})

module.exports = router; 

我的架构文件。

const mongoose = require("mongoose");
const validator = require("validator");

const studentSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    minlength: 3
  },
  email: {
    type: String,
    required: true,
    unique: [true, "Already Exists"],
    validate(value) {
      if (!validator.isEmail(value)) {
        throw new Error("Invalid Email")
      }
    }
  },
  phone: {
    type: Number,
    minlength: 10,
    required: true,
    unique: true
  },
  address: {
    type: String,
    required: true
  }
});

// creating new collection using model
const Student = new mongoose.model("Student", studentSchema);

module.exports = Student;

Inputs are given but it doesn't takes it as one

请询问是否需要更多信息...

最佳答案

您正在将数据发送到路由器,而没有先解析它。

// Calling Router
app.use(studentRouter);

// Middleware
app.use(express.json());

这应该是其他方式

// Middleware
app.use(express.json());

// Calling Router
app.use(studentRouter);

关于javascript - 尽管给出了字段输入,但 Postman 上的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70225402/

相关文章:

php - 提交表单元素后如何将网页重定向到不同的网页

javascript - AngularJS 项目结构

javascript - 为什么actionherojs任务没有自动启动?

Android Volley : POST request - req. NodeJS REST API 内部为空

node.js - 如何使用快速 Node Web API 在 hr Redis 之后使 key 过期

javascript - nodejs - 请求 - 表达 - 在后处理程序中使用文件 readStream

javascript - Phonegap/iOS7 项目中无法使用音频文件错误

javascript - 使用 javascript 设置最大高度

javascript - Spot it 算法 - js

node.js - 为什么我应该创建一个 json 来保存来自 Mongoose + MongoDB + Node.JS 的文档?