req.body пуст в приложении среднего стека
Я пытаюсь сделать приложение опроса, используя узел, экспресс и угловой. На внешнем интерфейсе они отправляют форму, а затем отправляют ее на сервер с запросом http post. Когда он наконец достигает правильного маршрута, я регистрирую req.body, и он пуст.
Все, что я читал в Интернете, говорит о том, что я, вероятно, испортил свое промежуточное программное обеспечение для синтаксического анализа тела, так что я некоторое время возился с этим, но пока ничего не получалось. Любая помощь приветствуется.
вот мой пост на переднем крае:
addVote(vote: Vote){
const body = JSON.stringify(vote);
const headers = new Headers({'Content-Type': 'application/json'});
console.log(body);
const token = localStorage.getItem('token')
? '?token=' + localStorage.getItem('token')
: '';
return this.http.post('http://localhost:8080/poll' + token, body, {headers})
.map((response: Response) => {
const result = response.json();
const vote = new Vote(result.obj.os, 1);
console.log(result)
return vote;
})
.catch((error: Response) => console.error(error))
}
мое промежуточное программное обеспечение это:
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PATCH, DELETE, OPTIONS');
next();
});
и задний маршрут здесь:
app.use('/poll', pollRoutes);
и здесь:
router.post('/', function (req, res, next) {
console.log(req.body)
}
PS: console.log(body) в моем внешнем интерфейсе читает {"os":"MacOS","points":1}, что я и хотел бы получить в своем внутреннем интерфейсе. Заранее спасибо!
PSS: Я взял {"os":"MacOS","points":1}, которые выводились на консоль, и ввел его в почтальоне, и он работал просто отлично, так что это должно быть проблемой с моим угловым кодом.
2 ответа
Это закончилось тем, что я использовал http. Я попытался использовать их новый HttpClient вместо http. Когда я сделал это, я не переключал заголовки на более новую версию, HttpHeaders, и это то, что сломало его.
Есть две проблемы,
(i) Вам нужно добавить токен под заголовками запроса
(ii) В вашей конфигурации экспресс-маршрута node.js у вас должен быть маршрутизатор, определенный с помощью URL / Poll
router.post('/poll', function(req, res) {