带有jQuery和Node / Express的AJAX POST发送空对象

问题描述 投票:0回答:1

客户:

$('#send-button').on('click', () => {
  $.post('/send-data', JSON.stringify({ a: 10, b: 20 }), (data, status) => {
    console.log(data)
  })
})

服务器:

const express = require('express')
const app = express()
app.use(express.json())

app.use(express.static(__dirname))

app.post('/send-data', (req, res) => {
  console.log(req.body)
  res.send(JSON.stringify(req.body))
})

app.listen(3000, () => {
  console.log(`Listening on port 3000...`)
})

预期结果:

单击按钮时,客户端和服务器都将{ a: 10, b: 20 }打印到控制台。

实际结果:

单击按钮时,客户端和服务器都将{}打印到控制台。


我为什么会得到这个结果?

EDIT:我没有使用body解析器。从Express 4.16开始不再需要app.use(bodyParser.json())。提出的重复问题询问有关使用body-parser进行快速表达4.16之前的问题,并且答案对我的用例不起作用。

javascript jquery node.js express
1个回答
0
投票

导入body-parser并添加到您的中间件,例如:

const bodyParser = require('body-parser');

app.use(bodyParser.json());

app.post('/send-data', (req, res) => {
  console.log(req.body)
  res.send(JSON.stringify(req.body))
})

没有使用过jQuery,但是可以肯定的是,在发布时,您不必认为需要字符串化:

$.post( "/send-data", { a: 10, b: 20 })
  .done(function( data ) {
    console.log(data)
  });
© www.soinside.com 2019 - 2024. All rights reserved.