Ajax публикует пустые данные - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь сделать запись AJAX в мой Express API.

Я ожидаю, что {user: Todd} будет возвращен в моем объекте данных, однако всякий раз, когда я пытаюсь зарегистрировать тело запроса, объект отображается как пустой ./

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

Я также всегда тестирую свои конечные точки с помощью cURL, и я помню, что мне нужно было передать заголовок "Content-Type: application / json", чтобы это работало в прошлом.

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

Я слушаю запросы на моем сервере NodeJS, и вышеупомянутый запрос даже не касается моего сервера, в то время как первый отправляет пустой JSON.

Я официально запутался! Как добавление заголовка может нарушить мой API, как это?

Вот простой исходный код моего API.

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

let app = express();
let port = 3000

app.use(bodyParser.json({
        limit:'150mb'
}));

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

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

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Мне удалось решить это вчера. Я ценю всю помощь.

Оказывается, мне нужно было добавить следующий код в мой экспресс-анализатор тела:

app.use(bodyParser.urlencoded({ extended: true }));
0 голосов
/ 09 мая 2019

Попробуйте это внутри тега 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 .

Обмен ресурсами между источниками - это механизм, позволяющий запрашивать ограниченные ресурсы на веб-странице из другого домена за пределами домена, из которого был получен первый ресурс. Веб-страница может свободно вставлять изображения, таблицы стилей, сценарии, фреймы и видео из разных источников. - Википедия

Так что 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}`));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...