根据我快速路线中的req.body,正在发送的请求正文为空。
我的主节点文件如下 -
app.post('/signup', function(req,res,next){
if (!req.body||req.body=={}){
return res.status(400).send("Bad Request")
}
var user = new User(req.body);
user.password = bcrypt.hashSync(req.body.password, 10);
User.create(user, function(err,new_user){
if (err) {
console.log('A Big Error');
return res.status(500).send("There was a problem registering the user.")
}
//success code
})
});
auth.routes文件有注册路由,这是req.body是空的,但它没有点击检查的if语句,但是当我在console.log(re.body)时,它给了我 - {}
signup(user:User):Observable<boolean>{
return this.http.post(this.signup_url,JSON.stringify(user),
{
headers: new HttpHeaders().set('Accept', "application/json;q=0.9,*/*;q=0.8").set('Content-Type', "x-www-form-encoded")
})
.map((response: Response) => {
if(response){
if(response.json() && response.json().token&&response.json().user&&response.json().expires){
this.setSession(response.json());
return true;
}
else{
return false;
}
}
else{
return false;
}
});
}
来自angular 4应用程序的请求是
this.http.get('https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Vict&types=geocode&key=YOUR_API_KEY').subscribe(response=>{
console.log(response.json());
});
我确信Angular 4应用程序正在向服务器发送正确的数据并且它不是空的 - 检查了chromes网络请求正文。
我尝试过以下链接但没有效果。
Express app empty request body with custom content type headers
Express receiving empty object
Node.js: Receiving empty body when submitting form
还尝试了邮递员,结果是一样的 - 这意味着问题来自快递服务器而不是客户端。
答案 0 :(得分:3)
没有必要对发布的数据进行字符串化,body-parser
中间件将负责将数据解析为对象:
return this.http.post(this.signup_url, user, { ... }).map( ... );
另一件事,在post处理程序中,您可能希望使用.save()方法而不是.create(),因为您已经创建了一个模型实例,请记住,.save()
方法可用于模型实例,而直接从模型调用.create()
并将对象作为第一个参数
.save()
方法示例:
app.post('/signup', function(req,res,next) {
if (!req.body){
return res.status(400).send("Bad Request");
}
var user = new User(req.body);
var salt = bcrypt.genSaltSync(saltRounds);
user.password = bcrypt.hashSync(req.body.password, salt);
user.save(function( err ) {
if (err) {
console.log('A Big Error');
return res.status(500).send("There was a problem registering the user.");
}
//success code
res.json({ success: true });
})
});
使用.create()
方法示例:
router.post('/signup', function(req,res,next){
if (!req.body){
return res.status(400).send("Bad Request")
}
var salt = bcrypt.genSaltSync(saltRounds);
req.body.password = bcrypt.hashSync(req.body.password, salt);
User.create ( req.body, function( err, new_user) {
if (err) {
console.log('A Big Error');
return res.status(500).send("There was a problem registering the user.")
}
//success code
res.json({ success: true });
});
});