gpt4 book ai didi

javascript - RESTful 服务,Post 无法正确保存到数据库

转载 作者:行者123 更新时间:2023-11-29 21:40:04 28 4
gpt4 key购买 nike

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}

我正在找回 body :{“_id”:“5629377429d3c1088c0ebf37”,“读”:假}所以从书本模型中只有最后一个参数在正文中,

如果我遗漏了什么,你能帮我看看吗

最佳答案

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

我认为当您从 Postman 调用电话时,您错过了 Content-Type header 。我在没有标题的情况下重现了您的问题,并且它适用于标题。这是我用来使您的代码正常工作的请求:

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 模块需要这个提示来知道如何处理内容。如果您想支持默认内容类型(我的意思是如果 header 不存在 - 事实上,它应该存在),您可以添加一个 Express 中间件来在请求中设置内容类型(如果有的话)。

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

bookRouter.route('/')
.post(function(req, res){
var book = new Book(req.body);

book.save(function(err, savedBook) {
res.status(201).send(savedBook);
});
})

希望对你有帮助,蒂埃里

关于javascript - RESTful 服务,Post 无法正确保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33289050/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com