我正在尝试使用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}显示到控制台并在邮递员中输入工作得很好,所以它必须是我的角度代码的问题。
答案 0 :(得分:1)
有两个问题,
(i)您需要在请求的标题下添加令牌
(ii)在您的node.js快速路由配置中,您应该使用url'/ poll'定义路由器
router.post('/poll', function(req, res) {
答案 1 :(得分:1)
它最终成为我的http用法。我尝试使用他们的新HttpClient而不仅仅是http。当我这样做时,我没有将标题切换到较新的版本,HttpHeaders,这就是打破它的原因。