restful服务,Post不能正常保存到db

RESTfull services, Post cannot save properly to db

本文关键字:保存 db 常保存 服务 Post 不能 restful      更新时间:2023-09-26

RESTfull services, Post不能正常保存到db

我有节点+快车+猫鼬我的模型:

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;

我使用postpost进行测试我可以得到所有的信息,但是当我试图发布像

这样的东西时
{"title":"WAR","genre":"Sience Fiction","author":"Wells","read":false}

I'm getting back body:{" _id ":"5629377429 d3c1088c0ebf37","读":假}从book模型中,最后一个参数在body中

你能不能看一下我是否遗漏了什么

您可以在POST方法上显示您在应用程序中收到的内容。我的意思是:打印变量req.body的内容。我猜它是空的。

我认为你错过了Content-Type头当你从邮差的电话。我在没有头的情况下复制了您的问题,它与头一起工作。下面是我用来让你的代码工作的请求:

POST /api/books/ HTTP/1.1
Content-Type: application/json
{"title":"WAR","genre":"Sience Fiction","author":"Wells","read":false}

和相应的响应:

HTTP/1.1 201 Created
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 111
ETag: W/"6f-25V+nQZe0YZPysuvDsoa5Q"
Date: Fri, 23 Oct 2015 07:34:43 GMT
Connection: keep-alive
{"__v":0,"title":"WAR","genre":"Sience Fiction","author":"Wells","_id":"5629e313074a746934d55f40","read":false}

事实上,body-parser模块需要这个提示来知道如何处理内容。如果你想支持默认的内容类型(我的意思是如果头部不存在——事实上,它应该在那里),你可以添加一个Express中间件来设置请求中的内容类型(如果有的话)。

否则,关于您的代码有一个小小的注释。您可以更新它以利用save方法中的回调:

bookRouter.route('/')
  .post(function(req, res){
    var book = new Book(req.body);
    book.save(function(err, savedBook) {
      res.status(201).send(savedBook);
    });
  })

希望它能帮助你,蒂埃里