繁体   English   中英

使用POST方法时,Node.js req.body为空

[英]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.sendres.json语句之上,会res.json什么?

另外,我只是想知道,为什么要使用res.send后跟res.json

好。 所以我想这可能是扩展问题。 我使用相同的代码在chrome中使用POSTMAN发送POST请求,现在工作正常。 甚至甚至Postman都无法正常工作,但是在将chrome配置为不使用代理服务器后,它就可以正常工作。

谢谢大家的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM