Как получить доступ к данным на стороне сервера, используя экспресс, который отправляется клиентом как часть запроса на размещение

Ниже приведен мой угловой HTTP-запрос.

postRequest(data) : Observable<any>{
    return this.http.post("http://localhost:5050",data).pipe(map(this.dataHandler));
  }

Когда я делаю этот вызов, на стороне сервера вызывается следующий метод:

app.put("/",function(request,response){
    response.send("Put request received successfully");
})

Я хочу получить данные, которые отправляются с клиента как часть запроса на размещение на стороне сервера в экспресс-режиме. Пожалуйста помоги. Заранее спасибо.

Что такое данные? полезная нагрузка JSON, данные формы? вы можете выложить скриншот запроса в консоль разработчика браузера?

Marcos Casagrande 09.06.2018 20:59

Данные - это просто передаваемое числовое значение. Локальные данные: 5 this: ApiServiceService http: Http {_backend: XHRBackend, _defaultOptions: BaseRequestOptions} прото: Закрытие объекта (./src/app/api-service.service.ts) Window Global

ManishChahal 09.06.2018 21:09

Тем не менее, покажите мне запрос, в зависимости от типа содержимого синтаксический анализ на сервере выполняется по-разному.

Marcos Casagrande 09.06.2018 21:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прежде всего, вы должны использовать put вместо post, если вы хотите выполнить запрос PUT.

this.http.put(...)

Затем на стороне сервера вы можете использовать body-parser для анализа данных запроса и использовать их в своем промежуточном программном обеспечении.

const bodyParser = require('body-parser');
/* ... */
app.use(bodyParser.json()); // If you're sending a JSON payload
app.use(bodyParser.urlencoded({ extended: true })); // application/x-www-form-urlencoded
app.use(bodyParser.text()); // You're sending text/plain

/* ... */
app.put("/",function(request, response){
    console.info(request.body); // Data is inside body
    response.send("Put request received successfully");
});

Вам необходимо отправить: Content-Type: application/json для работы bodyParser.json(), без него ваши данные JSON не будут проанализированы, или application/x-www-form-urlencoded для bodyParser.urlencoded()

The bodyParser object exposes various factories to create middlewares. All middlewares will populate the req.body property with the parsed body when the Content-Type request header matches the type option, or an empty object ({}) if there was no body to parse, the Content-Type was not matched, or an error occurred.

В вашем конкретном случае вы отправляете Content-Type: text/plain, поэтому просто используйте:

app.use(bodyParser.text());

Я могу отправлять данные только в формате json или как часть URL-адреса?

ManishChahal 09.06.2018 21:21

Нет, как хотите, парсинг у каждого типа разный. Вот почему я прошу вас показать мне, как вы его отправляете. так что покажите мне запрос на консоли разработчика, или как curl

Marcos Casagrande 09.06.2018 21:23

Это не запрос на консоли разработчика, перейдите на xhr и там вы увидите запрос.

Marcos Casagrande 09.06.2018 21:26

Ниже приводится запрос: curl 'локальный: 5050' -X OPTIONS -H 'Access-Control-Request-Method: PUT' -H 'Источник: локальный: 4200' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept- Язык: en-US, en; q = 0.9 '-H' User-Agent: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, как Gecko) Chrome / 66.0.3359.181 Safari / 537.36 '- H 'Accept: /' -H 'Connection: keep-alive' --compressed

ManishChahal 09.06.2018 21:30

Это ВАРИАНТЫ, данные не отправляются, покажите мне запрос PUT.

Marcos Casagrande 09.06.2018 21:35

следующим может быть запрос: curl "локальный: 5050" -X PUT -H "Origin: локальный: 4200" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US, en; q = 0.9" -H "User-Agent: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 66.0.3359.181 Safari / 537.36" -H "content-type: text / plain" -H "Accept: application / json, text / plain, /" -H "Referer: локальный: 4200" -H "Connection: keep-alive" --data-binary "5" --compressed

ManishChahal 09.06.2018 21:36

Проверьте обновленный ответ, используйте: app.use(bodyParser.text());

Marcos Casagrande 09.06.2018 21:41

Другие вопросы по теме