Javascript 聚合:向NodeJS后端发出JSON ajax请求

Javascript 聚合:向NodeJS后端发出JSON ajax请求,javascript,json,node.js,express,polymer,Javascript,Json,Node.js,Express,Polymer,我正在尝试使用NodeJS作为聚合物前端的后端api进行测试。在聚合物方面,我有一个铁元素: <iron-ajax id='test-req' url='http://localhost:9090/backend-test' handle-as='text' on-response='testRsp' body='{"data":"stuff"}'> </iron-ajax> 正如您所看到的,它所做的只是响应原始请求,并在后端记录请求。双方的

我正在尝试使用NodeJS作为聚合物前端的后端api进行测试。在聚合物方面,我有一个铁元素:

<iron-ajax 
  id='test-req' 
  url='http://localhost:9090/backend-test' 
  handle-as='text' 
  on-response='testRsp'
  body='{"data":"stuff"}'>
</iron-ajax>
正如您所看到的,它所做的只是响应原始请求,并在后端记录请求。双方的预期结果相同,但不幸的是结果只是
{}

现在,我还尝试通过params属性而不是iron ajax元素的body属性发送json,在后端我使用了不推荐的req.param()函数,如:
req.param('data')
,这样可以在浏览器和后端正确打印出
内容。然而,由于它已被弃用,我试图避免使用这种方法

有什么建议吗

编辑:我想这条额外的信息会有所帮助。当我在“params”中传递json时在后端记录
req.originalUrl
时,我得到
/backend test?data=stuff
。当传入“body”时,它只是
/backend test

我还想指出,我也尝试过bodyParser中间件的各种变体:

->
app.use(bodyParser.json())
(结果如上所述)

->
app.use(bodyParser.text())
(相同)

->根本不使用bodyParser(根据express文档按预期打印
未定义的

->
app.use(bodyParser.text());use(bodyParser.urlencoded({extended:true}))(与json()和text()的输出相同;取自)

Edit2谢谢美联社。我一直将use语句放在任何路由定义之前,如下所示:

// Create Express object, enable CORS
var app = express()
app.use(bodyParser.json())
app.use(cors())

// Route definitions
app.post('/backend_test', function(req, res){
    res.json(req.body)
    console.log(req.body)

})

app.listen(9090, function() {
    console.log('App started, listening on port 9090')
})
我还更新了我的iron ajax元素,以显式地生成一个post而不是get,并将内容类型设置为json,但没有骰子。我仍然只能从另一边得到
{}

<iron-ajax 
  id='test-req' 
  url='http://localhost:9090/backend_test' 
  content-type="json"
  method="post"
  handle-as='json' 
  on-response='testRsp'
  body='{"data":"stuff"}'>
</iron-ajax>


Edit3我发现了更新中的错误,内容类型需要是
application/json
,而不仅仅是
json
。这使它终于起作用了。谢谢

您的中间件应该在路由之前初始化,并且应该有点类似于:

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
就聚合物实现而言,如果您发送的是
JSON
数据,那么您的元素还应该包含:

<iron-ajax content-type='json'>
<iron-ajax content-type='json'>
<iron-ajax content-type='json' method='post'>