【问题标题】:whenever I try to make a post request in postman i get error "Todo validation failed: task: Path `task` is required"每当我尝试在邮递员中发出发布请求时,我都会收到错误“Todo 验证失败:任务:需要路径`task`”
【发布时间】:2019-12-10 22:53:41
【问题描述】:

这是我的 app.js

const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const mongoose = require("mongoose");

const inputRoutes = require("./routes/input");

const app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());

app.use(cors());
app.use((req, res, next) => {
  res.setHeader("Acess-Control-Allow-Origin", "*");
  res.setHeader(
    "Acess-Control-Allow-Methods",
    "OPTIONS ,GET ,POST ,PUT,PATCH , DELETE"
  );
  res.setHeader("Acess-Control-Allow-Headers", "Content-Type, Authorization");
  next();
});

app.use("/input", inputRoutes);

mongoose
  .connect("mongodb://localhost:27017/MEAN", { useNewUrlParser: true })
  .then(result => {
    app.listen(2400);
  })
  .catch(err => console.log(err));

这是我的路线/input.js

const express = require("express");
const router = express.Router();

const inputController = require("../controller/input");

router.post("/todo", inputController.createTodos);

module.exports = router;

这是我的控制器,input.js

const Todo = require("../models/todos");
const { validationResult } = require("express-validator/check");

exports.createTodos = (req, res, next) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    const error = new Error("validation failed due to incorrect data");
    error.statusCode = 442;
    throw error;
  }

  const task = req.body.task;
  const status = req.body.status;
  console.log(task);
  console.log(status);

  const todo = new Todo({
    task: task,
    status: status
  });
  todo
    .save()
    .then(result => {
      console.log(task);
      res.status(201).json({
        message: "post created sucessfully",
        post: result
      });
    })
    .catch(err => {
      if (!err.statusCode) {
        err.statusCode = 500;
      }
      next(err);
    });
};

这是我的 model.js

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const todoSchema = new Schema(
  {
    task: {
      type: String,
      required: true
    },
    status: {
      type: Boolean,
      default: false
    }
  },
  { timestamps: true }
);

module.exports = mongoose.model("Todo", todoSchema);

【问题讨论】:

  • 您在 Postman 中发送的请求是什么?发布 Postman 设置的屏幕截图或摘要可能会有所帮助。
  • 我将密钥作为“任务”发送,值作为“完整后端”发送
  • 这些行打印的值是否正确? console.log(task); console.log(status);
  • 您能否验证您正在使用 JSON,正如您的 API 所期望的那样?如果您不小心选择了 form-data 或 x-www-form-urlencoded 它不会解析您的数据。
  • 在 postman POST 请求正文中,首先选择 raw 选项,然后在右侧的下拉列表中选择 JSON,并在正文中使用类似这样的 { "task": "task1" }

标签: javascript node.js express postman


【解决方案1】:

您需要在邮递员中发送 JSON 请求,首先选择 raw 选项,然后在右侧下拉菜单中选择 json。

您似乎也使用了 express-validator 包,但您没有在路由器中使用它。

在路由器中你可以这样使用:

const express = require("express");
const router = express.Router();
const { check } = require("express-validator");

const inputController = require("../controller/input");

router.post("/todo", [
    check("task")
      .not()
      .isEmpty()
  ], inputController.createTodos);

module.exports = router;

同样在控制器中你应该从express-validator导入validationResult, 并像这样验证结果:

const { validationResult } = require('express-validator');

exports.createTodos = (req, res, next) => {

  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }

  ....
}

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 2021-11-15
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2022-07-19
    • 2016-07-07
    相关资源
    最近更新 更多