You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Polymer实现登录获用户数据遇阻,Postman正常但返回undefined

解决Polymer iron-ajax POST请求导致Node.js后端JSON解析错误的问题

先帮你拆解下核心问题:后端抛出的SyntaxError: Unexpected token # in JSON at position 0,本质是body-parser无法正确解析请求体的JSON格式。结合Postman能正常工作但Polymer不行的情况,问题根源很明确——你用错了iron-ajax的参数属性。

问题出在哪?

你在iron-ajax里配置了params="[[params]]",但这个属性是用来把数据拼在URL的查询字符串里的(比如http://localhost:8080/login?username=xxx&password=xxx),而不是放在POST请求的请求体中。你的Node.js后端是通过req.body来获取JSON格式的请求数据,这就导致后端收到的请求体是空的(或者格式完全不符合JSON要求),body-parser解析失败,自然抛出语法错误,Polymer那边也就拿不到正确响应,返回undefined或者空数组。

具体修复步骤

只需要把iron-ajax的params属性改成body,让请求数据放在POST的请求体里,和你在Postman里的操作逻辑对齐即可:

修改后的Polymer iron-ajax代码

<iron-ajax id="ajaxUser" 
           url="http://localhost:8080/login" 
           method="post" 
           handle-as="json" 
           content-type="application/json" 
           headers='{"Access-Control-Allow-Origin": "*"}' 
           body="[[params]]" <!-- 替换原来的params属性 -->
           on-response="saveUserCredentials" 
           last-response="{{user}}"></iron-ajax>

登录方法可以保持(或简化)

loginUser() {
  this.params = {"username": this.$.username.value, "password": this.$.password.value};
  console.log(this.params); // 确认数据正确
  // 直接发送请求即可
  this.$.ajaxUser.generateRequest();
}

额外确认项

确保你的Node.js后端已经正确配置body-parser解析JSON请求体(Postman能正常工作应该已经配置了,但还是检查下更稳妥):

const bodyParser = require('body-parser');
// 解析JSON格式的请求体
app.use(bodyParser.json());
// 如果需要处理表单编码请求,可添加(可选)
app.use(bodyParser.urlencoded({ extended: true }));

修复后为什么正常?

修改后,iron-ajax会把params里的JSON对象作为请求体发送,和你在Postman中选择raw -> JSON格式发送请求的行为完全一致。后端的body-parser能正确解析这个请求体,req.body.username和req.body.password就能拿到正确的值,查询数据库后返回的JSON响应也能被Polymer正常接收,this.user就不会再是undefined或者空数组了。

内容的提问来源于stack exchange,提问作者KVNA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:39:39