Подтвердить что ты не робот

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");});

Что не так?

EDIT: Вот запрос, который отображается на консоли: enter image description here

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

4b9b3361

Ответ 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);
});