验证失败了nodejs必填字段

时间:2016-11-07 07:26:58

标签: node.js mongoose

我正在创建Node.js中的书店演示应用程序。我遇到了创建流派的POST请求。我已经设置好了,如果不将它插入数据库,必须要求该类型的名称。但是当我使用Postman POST到url localhost:3000 / api / genres with the JSON

{
  "name": "TEST"
}

它会抛出错误

{
  "error": "Genre validation failed"
}

当我删除genreSchema中的必填字段时,它可以正常工作,但不会显示该类型的名称。这是我的代码

代码:

genre.js

var mongoose = require("mongoose");


// Create a schema for genre
var Schema = mongoose.Schema;

var genreSchema = Schema({
    name:{ 
        type: String, 
        required: true 
    },
    create_date:{ 
        type: Date, 
        default: Date.now 
    }
});
var Genre = module.exports = mongoose.model("Genre", genreSchema);

// Methods

// get genres 
module.exports.getGenres = function(callback, limit) {
    Genre.find(callback).limit(limit);
};
// add a new genre
// TODO: Not working in Postman ValidationError
module.exports.addGenre = function(genre, callback) {
    Genre.create(genre, callback);
};

app.js

var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var mongoose = require("mongoose");
var Genre = require('./models/genre');
var Book = require('./models/book');
// Connect to mongoose
mongoose.connect("mongodb://localhost/bookstore");
var db = mongoose.connection;

app.get("/", function(req, res){
    res.json({ error: "Please use /api/books or /api/genres" });
});

// GET /api/genres
app.get('/api/genres', function(req, res){
    Genre.getGenres(function(err, genres){
        if(err) {
            res.json({error: err.message})
        }
        res.json(genres);
    });
});
app.post('/api/genres', function(req, res){
    var genre = req.body;
    Genre.addGenre(genre, function(err, genre){
        if(err) {
            res.json({
                error: err.message
            })
        }
        res.json(genre);
    });
});
// GET /api/books
app.get('/api/books', function(req, res){
    Book.getBooks(function(err, books){
        if(err) {
            res.json({error: err.stack})
        }
        res.json(books);
    });
});
// GET /api/book/:id
app.get('/api/book/:_id', function(req, res){
    Book.getBookById(req.params._id, function(err, book){
        if(err) {
            res.json({error: err.message})
        }
        res.json(book);
    });
});


app.listen(3000, function(){
    console.log("Running on port 3000!")
});

1 个答案:

答案 0 :(得分:0)

您是否在邮路中尝试了console.log(req.body);?我不认为你将身体解析器设置为中间件,因此req.body是空的,因此不会向你的Genre.addGenre方法发送任何内容。