如何解决在HTTP请求中发送JSON字符串时,req.body在express中为空
Express收到一个空的json字符串{},但我一直无法弄清原因。我已经为json解析器尝试了bodyParser和express.json,并且得到了相同的结果。我也找不到标题有问题。下面是相关代码:
HTTP客户端对请求进行认证
private sendRequest<T>(verb: string,url: string,body?: any)
: Observable<T> {
let myHeaders = new HttpHeaders();
// myHeaders = myHeaders.set("Access-Key","<secret>");
// myHeaders = myHeaders.set("Application-Names",["Rapid Recipes","MSsanto"]);
return this.http.request<T>(verb,url,{
body: JSON.stringify(body),headers: myHeaders })
.pipe(catchError((error: Response) => throwError(`Network Error: ${error.statusText} (${error.status})`)));
}
Express App
var app = express();
//app.use(bodyParser());
//app.use(bodyParser.json({ limit: 'Smb' }));
//app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.json());
app.use(function (req,res,next) {
res.setHeader('Access-Control-Allow-Origin','http://localhost:4200');
res.setHeader('Access-Control-Allow-Methods','GET','POST','OPTIONS','PUT','PATCH','DELETE',);
res.setHeader('Access-Control-Allow-Headers','Authorization','X-Requested-With,Content-Type','application/x-www-form-urlencoded','application/json');
res.setHeader('Access-Control-Allow-Credentials',true);
next();
app.post("/:type",function (req,res) {
console.log('The POST was received');
var typeName = req.originalUrl.substring(1).toLowerCase();
var params = {};
params[typeName] = 1;
params["_id"] = 1
console.log("the request bod is " + JSON.stringify(req.body)); //this returns {}
var dbm = dbModel.findOne({},params);
dbm.updateOne({ $push: { "recipe": req.body } },function (err,data)
{
if (err) {
res.send(err);
}
else {
res.send(data)
console.log('data saved!');
} } ) }
)
});
解决方法
您没有在请求标头中发送内容类型。
myHeaders = myHeaders.set("Content-Type","application/json");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。