Ниже приведен мой угловой 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");
})
Я хочу получить данные, которые отправляются с клиента как часть запроса на размещение на стороне сервера в экспресс-режиме. Пожалуйста помоги. Заранее спасибо.
Данные - это просто передаваемое числовое значение. Локальные данные: 5 this: ApiServiceService http: Http {_backend: XHRBackend, _defaultOptions: BaseRequestOptions} прото: Закрытие объекта (./src/app/api-service.service.ts) Window Global
Тем не менее, покажите мне запрос, в зависимости от типа содержимого синтаксический анализ на сервере выполняется по-разному.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Прежде всего, вы должны использовать 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-адреса?
Нет, как хотите, парсинг у каждого типа разный. Вот почему я прошу вас показать мне, как вы его отправляете. так что покажите мне запрос на консоли разработчика, или как curl
Это не запрос на консоли разработчика, перейдите на xhr и там вы увидите запрос.
Ниже приводится запрос: 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
Это ВАРИАНТЫ, данные не отправляются, покажите мне запрос PUT.
следующим может быть запрос: 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
Проверьте обновленный ответ, используйте: app.use(bodyParser.text());
Что такое данные? полезная нагрузка JSON, данные формы? вы можете выложить скриншот запроса в консоль разработчика браузера?