AngularJS + ExpressJS. Прокси-запрос POST ожидает рассмотрения

Используя AngularJS + Express, у меня есть следующий код для передачи моих запросов к удаленному сервису:

app.get('/api.json', function (req, res) {
    req.pipe(request("http://test-api.com/api.json")).pipe(res);
});

app.post('/api.json', function (req, res) {
    req.pipe(request.post("http://test-api.com/api.json")).pipe(res);
});

Все запросы GET работают нормально, однако запросы POST ожидают в моем браузере.

Вот как я размещаю:

$http({
   method: 'POST',
   url: '/api.json',
   data: $.param({
       "title": not.title,
       "desc": not.description
  }),  // pass in data as strings
   headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}).success(function () {alert("Success");});

В чем дело?

РЕДАКТИРОВАТЬ: Вот запрос, как видно на консоли:введите описание изображения здесь

Что я должен проверить, чтобы дать больше информации?

1 ответ

Решение

Вы должны были упомянуть, что используете библиотеку запросов:

https://github.com/mikeal/request

request.post () ожидает форму либо как второй параметр:

request.post('http://service.com/upload', {form:{key:'value'}})

или как цепочка вызовов:

request.post('http://service.com/upload').form({key:'value'})

Поскольку вы не передаете его в качестве аргумента, request.form() вообще не выполняет никаких запросов, ожидая, когда вы вызовете.form(). Но так как вы тоже этого не делаете, никакой запрос никогда не происходит, поэтому ответ никогда не возвращается, и, таким образом, ваше приложение видит, что запрос не получен без ответа. Вы можете видеть это на вкладке сети инструментов разработчика Chrome, где запрос покажет код состояния "(сбой)".

Так что просто получите данные формы из текущего запроса и передайте их в request.form, и он должен работать.

Для дальнейшего использования отладчик скажет вам, в чем именно заключается ошибка. Я рекомендую тот, который включен в Webstorm, но не стесняйтесь использовать любой отладчик вообще.

Изменить: не пробовал, но это то, что я хотел бы попробовать

app.post('/api.json', function (req, res) {
    req.pipe(request.post("http://test-api.com/api.json", {form:req.body})).pipe(res);
});
Другие вопросы по тегам