Ajax发布空数据

时间:2019-05-08 15:35:37

标签: jquery node.js ajax express

我正在尝试在Express API上发布AJAX。

我期望{user:Todd}返回我的数据对象,但是,每当我尝试记录请求正文时,该对象就会显示为空。/

function addDays(date, days) {
          let fomarttedDate = date.split("/")
          var result = new Date(fomarttedDate[2], fomarttedDate[1] -1, fomarttedDate[0]);
          result.setDate(result.getDate() + days);
          result=result.toLocaleDateString();
          result = result.split(' ')[0];
          return result;
     }

console.log(addDays("23/05/2019", 2))

我也总是使用cURL测试端点,并且我记得我需要传递标头“ Content-Type:application / json”以便过去能够正常工作。

$.ajax({
  url: '/api/test',
  type: 'POST',
  data: ({user: "Todd"})
})

我正在监听NodeJS服务器上的请求,并且上面的请求甚至都没有碰到我的服务器,而第一个发送空JSON。

我正式感到困惑!如何添加标头会破坏我的API这样?

这是我的API的简单源代码。

$.ajax({
  url: '/api/test',
  type: 'POST',
  data: ({user: "Todd"}),
  contentType: 'application/json'
})

2 个答案:

答案 0 :(得分:0)

在您的html脚本标记中尝试

const apiHost = "http://localhost:3000";

 $.ajax({
    url: `${apiHost}/api/test`, //add full path of your host
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify({ //JSON data needs to be stringified before its sent through http.
      'user': 'hello'
    })
  })

您的服务器未收到请求的原因是由于 CORS 被阻止/受限制。

  

跨源资源共享是一种机制,它允许从提供第一资源的域之外的另一个域请求网页上的受限资源。网页可以自由地嵌入跨域图像,样式表,脚本,iframe和视频。 -维基百科

npm install --save cors并使用下面的代码

var express = require('express');
var bodyParser = require('body-parser')
var cors = require('cors');

let app = express();
let port = 3000

app.use(cors()); // add cors to middleware

app.use(bodyParser.json()); 
// for parsing application/json which was stringified in the ajax front-end

app.use(bodyParser.urlencoded({ extended: true }));
app.get('/api/test', function (req, res) {
   res.send("<h1>WOrking</h1>")
})

app.post('/api/test', function (req, res) {
   console.log(req.body)
});

app.listen(port, () => console.log(`App listening on port ${port}`));

答案 1 :(得分:-1)

我昨天设法解决了这个问题。我感谢所有的帮助。

事实证明,我需要在我的快速正文解析器中添加以下代码:

app.use(bodyParser.urlencoded({ extended: true }));