req.body在平均堆栈应用

时间:2018-02-03 02:40:23

标签: node.js angular express body-parser

我正在尝试使用node,express和angular创建一个轮询应用。在前端,他们提交一份表格,然后通过http发送请求将其发送到后端。当它最终到达正确的路线时,我记录req.body并且它是​​空的。

我在网上看到的所有内容都说我可能搞砸了我的身体解析器中间件,所以我一直在弄乱它,但到目前为止还没有任何工作。任何帮助将非常感激。

这是我在前端的帖子:

    addVote(vote: Vote){
        const body = JSON.stringify(vote);
        const headers = new Headers({'Content-Type': 'application/json'});
        console.log(body);
        const token = localStorage.getItem('token')
            ? '?token=' + localStorage.getItem('token')
            : '';
        return this.http.post('http://localhost:8080/poll' + token, body, {headers})
        .map((response: Response) => {
            const result = response.json();
            const vote = new Vote(result.obj.os, 1);
            console.log(result)
            return vote;
        })
        .catch((error: Response) => console.error(error))
}

我的中间件是:

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(function(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PATCH, DELETE, OPTIONS');
  next();
});

后端路线在这里:

app.use('/poll', pollRoutes);

在这里:

router.post('/', function (req, res, next) {
    console.log(req.body)
}

PS:我前端的console.log(正文),读取{" os":" MacOS","点":1},其中是我想要到达我的后端。提前致谢!

PSS:我把{" os":" MacOS","积分":1}显示到控制台并在邮递员中输入工作得很好,所以它必须是我的角度代码的问题。

2 个答案:

答案 0 :(得分:1)

有两个问题,

(i)您需要在请求的标题下添加令牌

(ii)在您的node.js快速路由配置中,您应该使用url'/ poll'定义路由器

router.post('/poll', function(req, res) {

答案 1 :(得分:1)

它最终成为我的http用法。我尝试使用他们的新HttpClient而不仅仅是http。当我这样做时,我没有将标题切换到较新的版本,HttpHeaders,这就是打破它的原因。