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) {
Другие вопросы по тегам