【发布时间】:2016-01-22 04:56:03
【问题描述】:
RESTfull 服务,Post 无法正确保存到数据库
我有node+express+mongoose 我的模型:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var bookModel = new Schema({
title: { type: String },
author: { type: String },
genre: { type: String },
read:{ type: Boolean, default:false }
});
module.exports = mongoose.model('Book', bookModel);
我的 App.js
var express = require('express'),
mongoose = require('mongoose'),
bodyParser = require('body-parser');
var db = mongoose.connect('mongodb://localhost/bookApi');
var Book = require('./models/bookModel');
console.log(Book);
var app = express();
var port = process.env.PORT || 3000;
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
bookRouter = require('./Routes/bookRoutes')(Book);
app.use('/api/books', bookRouter);
/*app.use('/api/authors', authorRouter);*/
app.get('/', function (req, res) {
res.send('welcome to my API!');
});
app.listen(port, function () {
console.log('Gulp running on Port: ' + port);
});
我的路线:
var express = require('express');
var routes = function(Book){
var bookRouter = express.Router();
bookRouter.route('/')
.post(function(req, res){
var book = new Book(req.body);
book.save();
res.status(201).send(book);
})
.get(function (req, res) {
var query = {};
if(req.query.genre){
query.genre = req.query.genre;
}
Book.find(query, function (err, books) {
if(err)
res.status(500).send(err);
else
res.json(books);
});
});
bookRouter.route('/:bookId')
.get(function (req, res) {
Book.findById(req.params.bookId, function (err, book) {
if(err)
res.status(500).send(err);
else
res.json(book);
});
})
.put(function (req, res){
Book.findById(req.params.bookId, function (err, book) {
if(err)
res.status(500).send(err);
else
book.title = req.body.title;
book.author = req.body.author;
book.genre = req.body.genre;
book.read = req.body.read;
book.save();
res.json(book);
});
});
return bookRouter;
};
module.exports = routes;
我正在使用 Postmant 进行测试 我可以获取所有信息,但是当我尝试发布类似
的内容时{"title":"WAR","genre":"Sience Fiction","author":"Wells","read":false}
我要恢复身体: {"_id":"5629377429d3c1088c0ebf37","read":false} 所以从书本模型中只有最后一个参数在正文中,
如果我遗漏了什么,请你看一下
【问题讨论】:
-
最后一个参数在正文中,因为您在模型中将其设置为默认值,因此实际上并未从请求中读取它。
-
在路线上打印出
console.log(req.body),并在此处发布它所显示的内容。 -
为空,返回:{}
-
如果我打印 console.log(req.body.title) 返回 undefined
-
查看 thierry 的回答,如果这不起作用,我们将从那里开始。
标签: javascript node.js rest express