每当我尝试在邮递员中发出发布请求时,都会出现错误“ Todo验证失败:任务:需要路径`任务`”

时间:2019-12-10 14:01:42

标签: javascript node.js express postman

这是我的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);

1 个答案:

答案 0 :(得分:0)

您需要先在邮递员中发送JSON请求,然后选择原始选项,然后在右侧的下拉列表中发送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;

还应在控制器中从validationResult导入express-validator, 并验证结果如下:

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() });
  }

  ....
}