我在后端的登录功能从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});
}
}
});
}
答案 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了解详情。