restful服务,Post不能正常保存到db
RESTfull services, Post cannot save properly to db
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);
});
})
希望它能帮助你,蒂埃里
相关文章:
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 如何将getJson的响应保存在全局变量中
- 按下按钮时保存cookie
- 如何使用 Angular JS 将数据保存在数据库中
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- HTML5在画布中加载较小的图像并保存实际大小的图像
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 如何将多个画布保存为一个图像
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 尝试使用mongoose和async保存到DB时出现多个错误
- 将Javascript变量发送到PHP以保存到DB
- 如何只需一次调用就可以将对象数组保存到mongoose DB中
- 将引用$(this)保存到DB
- restful服务,Post不能正常保存到db
- 为什么这个node.js + mongoose代码不保存到DB ?
- 无法用lokiJS将db保存为json文件
- Mongoose不会用NodeJs保存任何东西到db
- 如何保存对象以供以后使用?通过JSON或其他方式发送并存储在DB中,然后恢复
- 不能使用db.js将大数组保存到IndexedDB中
- 为什么我的post请求PostgreSQL DB保存我的UTC DATETIME作为本地时间