我真的很擅长使用REST和Express,而且我已经在REST API上关注了这个 tutorial 。这是我的 app.js 代码:
var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require("mongoose");
var app = express();
var port = parseInt(process.env.PORT, 10) || 3000;
app.use(bodyParser.urlencoded({ extended: true}));
app.use(bodyParser.json());
Genre = require('./models/genre');
//Connect to mongoose
mongoose.connect('mongodb://localhost/bookstore');
var db = mongoose.connection;
app.listen(port);
console.log('Running on port 3000\n\n');
app.post('/api/genres', function(req, res){
console.log(req.body);
var genre = req.body;
Genre.addGenre(genre, function(err, genre){
if (err) {
console.log(err);
res.send({status: 'something went wrong'});
}else{
res.send({status: 'saved'});
res.json(genre);}
});
});
我在Firefox上使用Rest Easy检查POST请求。生成的错误是"类型验证失败"因为身体是空的。用于此的模式在模型中定义为:
var mongoose = require("mongoose");
//Genre Schema
var genreSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
create_data:{
type: Date,
default: Date.now
}
});
var Genre = module.exports = mongoose.model('Genre', genreSchema);
// add genre
module.exports.addGenre = function(genre, callback){
Genre.create(genre, callback);
};
我已经尝试了其他几个流行的帖子,但它仍然没有解决问题。我已经尝试重新排列模块的导入顺序,并使用' application / x-www-form-urlencoded'将数据作为表单输入。任何的想法?
编辑:输出console.log(req.body):
{}
在jsfiddle.net上,console.log(req)的输出位于 jbkb1yxa 。(StackOverflow不会让我嵌入更多链接,因为我的声望点很低,道歉。) REST easy的屏幕截图: http://imgur.com/6QmQqRV
答案 0 :(得分:0)
您需要在REST Easy端的数据部分输入正确的MIME类型:
application/json
答案 1 :(得分:0)
可能是因为您对数据库的调用找不到您要查找的内容。当我第一次开始学习Mongoose时,对我来说,一个巨大的痛点是,我错误地认为空的回答被算作err
,但事实并非如此。
如果您将console.log(genre)
置于res.send
和res.json
语句之上,会记录什么内容?
另外,只是想知道,为什么使用res.send
后跟res.json
?
答案 2 :(得分:0)
确定。所以我想这可能是一个扩展问题。我使用相同的代码在chrome中使用POSTMAN发送POST请求,现在它正常工作。早些时候甚至Postman没有工作,但在我配置chrome不使用代理服务器之后,它工作得很好。
感谢大家帮助我。
答案 3 :(得分:0)
在Postman的3个可用于内容类型的选项中,选择“X-www-form-urlencoded”,它应该有效。
app.use(bodyParser.urlencoded({
extended: true
}));
请参阅https://github.com/expressjs/body-parser
'body-parser'中间件只处理JSON和urlencoded数据
在Postman中,要使用原始JSON数据有效负载测试HTTP post操作,请选择raw选项并设置以下标头参数:
Content-Type: application/json
另外,请务必用双引号将JSON有效内容中用作键/值的任何字符串换行。
body-parser包将解析多行原始JSON有效负载。
{
"foo": "bar"
}