[英]Node.js req.body is empty when using POST method
我真的是使用REST和Express的新手,并且一直在关注REST API上的本教程 。 这是我的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)的输出:
{}
console.log(req)的输出在jsfiddle.net上的jbkb1yxa上。(由于口碑不好 ,很抱歉,StackOverflow不会让我嵌入更多链接。)REST的截图: http : //imgur.com/6QmQqRV
在内容类型可用的3个选项的邮递员中,选择“ X-www-form-urlencoded”,它应该可以工作。
app.use(bodyParser.urlencoded({
extended: true
}));
参见https://github.com/expressjs/body-parser
“ body-parser”中间件仅处理JSON和urlencoded数据
在Postman中,要使用原始JSON数据有效负载测试HTTP投递操作,请选择raw选项并设置以下标头参数:
Content-Type: application/json
另外,请确保将用作JSON有效负载中的键/值的所有字符串都用双引号引起来。
body-parser包将很好地解析多行原始JSON负载。
{
"foo": "bar"
}
您需要在REST Easy端的data部分中输入正确的MIME类型:
application/json
可能是因为您对数据库的调用找不到您要查找的内容。 当我刚开始学习猫鼬时,我的一个巨大痛苦点是我错误地认为将空洞的回答视为err
但事实并非如此。
如果将console.log(genre)
放在res.send
和res.json
语句之上,会res.json
什么?
另外,我只是想知道,为什么要使用res.send
后跟res.json
?
好。 所以我想这可能是扩展问题。 我使用相同的代码在chrome中使用POSTMAN发送POST请求,现在工作正常。 甚至甚至Postman都无法正常工作,但是在将chrome配置为不使用代理服务器后,它就可以正常工作。
谢谢大家的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.