xxx-form-encoded到application / json

时间:2019-03-14 09:07:34

标签: node.js json postman

我在后端的登录功能从POSTMAN接受xxx-form-encoded格式的参数。当我将格式更改为application / json时,出现错误。关于如何接收request.body有任何想法吗?

authenticate: function(req, res, next) {
        userModel.findOne({email:req.body.email}, function(err, userInfo){
                    if (err) {
                        next(err);
                    } else {
                        console.log(`The bcrypt value: ${bcrypt.compareSync(req.body.password, userInfo.password)}`)
                        if(userInfo != null && bcrypt.compareSync(req.body.password, userInfo.password)) {

                         const token = jwt.sign({id: userInfo._id}, req.app.get('secret'), { expiresIn: '1h' }); 

                         res.json({status:"success", message: "user found!!!", data:{user: userInfo, token:token}});    

                        }else{

                            res.json({status:"error", message: "Invalid email/password!!!", data:null});

                        }
                    }
                });
    }

1 个答案:

答案 0 :(得分:1)

我认为您需要添加一个将请求正文解析为json的中间件。

您可以使用body-parser来实现它。

如果您使用快递,可以这样做:

var express = require("express");
var bodyParser = require("body-parser");
var app = express();

app.use(bodyParser.json({}));//this line is required to tell your app to parse the body as json
app.use(bodyParser.urlencoded({ extended: false }));

来自body-parser文档:

  

bodyParser.urlencoded([options])

     

返回仅解析urlencoded主体并且仅外观的中间件   应Content-Type标头与type选项匹配的请求。   该解析器仅接受主体的UTF-8编码并支持   自动压缩gzip和deflate编码。

     

将包含已解析数据的新主体对象填充到   中间件(即主体)之后的请求对象。该对象将   包含键值对,其中值可以是字符串或数组   (当extended为false时)或任何类型(当extended为true时)。

阅读body-parser documentation了解详情。