2016-11-07 2 views
0

Я создаю создание демонстрационного приложения для книжного магазина в Node.js. Я столкнулся с небольшой ситуацией с запросом POST для создания жанра. Я настроил так, чтобы имя жанра требовалось, если не вставлять его в базу данных. Но когда я использую Почтальон для POST к URL-адресу локального хоста: 3000/API/жанров с JSONНе удалось выполнить проверку nodejs обязательное поле

{ 
    "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!") 
}); 
+0

Какова ценность 'жанра' в' Genre.addGenre'? Вы уверены, что получаете правильные значения? – QoP

+0

Подождите, я думаю, что забыл разобрать мой JSON – Ethan

+0

Проблема была в том, что я не разбирал входящий json с модулем body-parser: P Stupid me. Я знал, что все правильно. – Ethan

ответ

0

Вы пробовали console.log(req.body); внутри вашего почтового маршрута? Я не думаю, что вы настроили body-parser как промежуточное программное обеспечение, так что req.body приходит в пустую и, следовательно, не отправляет ничего вашему методу Genre.addGenre.

+0

Как я только что сказал перед этим ответом, я заметил, что не разбирал JSON: P – Ethan