Node.js 从服务器向服务器发送数据时,请求正文为空

Node.js 从服务器向服务器发送数据时,请求正文为空,node.js,angular,express,body-parser,Node.js,Angular,Express,Body Parser,我正在尝试从客户端(角度)向nodejs服务器获取数据 我已经声明了一项服务 export class AddTaskService { constructor(private http: HttpClient) { } url = 'http://localhost:3000/tasks'; posttasks(task) { return this.http.post<string>(this.url, JSON.stringify({ task: task

我正在尝试从客户端(角度)向nodejs服务器获取数据

我已经声明了一项服务

export class AddTaskService {

  constructor(private http: HttpClient) { }
  url = 'http://localhost:3000/tasks';
  posttasks(task) {
    return this.http.post<string>(this.url, JSON.stringify({ task: task }));
  }

}
路由器.js

router
    .route("/tasks")
    .post(function (req, res) {
        var taskModel = new taskSchema();
        taskModel.task = req.body.task;
        console.log(req.body);
        taskModel.save(function (err) {
            if (err) {
                res.send(err);
            }
            res.json({
                message: "nouvProj created!"
            });
        });
    });
使用带有
x-www-form-urlencoded
的邮递员是可行的,但是当我发送数据
req.body
为空时,它是有角度的

编辑: 以下是url网络详细信息: 概述

Request URL: http://localhost:3000/tasks
Request Method: POST
Status Code: 200 OK
Remote Address: [::1]:3000
Referrer Policy: no-referrer-when-downgrade
响应标题

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods: GET, POST, PUT ,DELETE
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 31
Content-Type: application/json; charset=utf-8
Date: Sun, 27 May 2018 19:24:57 GMT
ETag: W/"1f-NlZ/5EsK7Z/S3Ze5LQN4AonQQ90"
X-Powered-By: Express
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: fr-FR,fr;q=0.9,ar-TN;q=0.8,ar;q=0.7,en-US;q=0.6,en;q=0.5
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 14
Content-Type: text/plain
DNT: 1
Host: localhost:3000
Origin: http://localhost:4200
Pragma: no-cache
Referer: http://localhost:4200/
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
请求标题

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods: GET, POST, PUT ,DELETE
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 31
Content-Type: application/json; charset=utf-8
Date: Sun, 27 May 2018 19:24:57 GMT
ETag: W/"1f-NlZ/5EsK7Z/S3Ze5LQN4AonQQ90"
X-Powered-By: Express
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: fr-FR,fr;q=0.9,ar-TN;q=0.8,ar;q=0.7,en-US;q=0.6,en;q=0.5
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 14
Content-Type: text/plain
DNT: 1
Host: localhost:3000
Origin: http://localhost:4200
Pragma: no-cache
Referer: http://localhost:4200/
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
请求有效负载

{task: "klj"}
task
:
"klj"

您可以将HTTP头作为选项传递:

const httpOptions = {
    headers: new HttpHeaders({
        'Content-Type': 'application/x-www-form-urlencoded',
    })
}
return this.http.post<string>(this.url, task, httpOptions);
const httpOptions={
标题:新的HttpHeaders({
“内容类型”:“应用程序/x-www-form-urlencoded”,
})
}
返回this.http.post(this.url、task、httpOptions);

正如@Joshua所建议的,但是你只需要稍微改变一下

const httpOptions = {
    headers: new HttpHeaders({
        'Content-Type': 'application/x-www-form-urlencoded',
    })
}
return this.http.post<string>(this.url, {task, httpOptions});
createTask(任务){
const-httpOptions={headers:newhttpheaders({'Content-Type':'application/json})};
const json=json.stringify(任务);
this.http.post(this.url、json、this.httpOptions);

}
你能发布你在放置console.log(JSON.stringify(req.body))时看到的内容吗;查看chrome中的“网络”选项卡,确定您的请求的去向可能重复的^?链接的问题是Angularjs,这是Angularjs。@MattPengelly console.log的结果是{}console.log的结果是
{{“task”:“value”}:'}
,而预期
{“task”:“value”}
删除JSON.stringify并直接发送javascript对象您缺少应用程序/JSON的结束引号