А затем вызов .form выглядит так, как будто вы настраиваете почтовую форму после отправки запроса. Так как это может работать?
Видимо, когда вы делаете это:
request.post('http://service.com/upload')
Запрос отправляется не сразу. Вместо этого он регистрируется (с setImmediate()
или process.nextTick()
) для отправки на следующем тике цикла событий.
Итак, когда вы выполняете request(...).form({key:'value'})
, .form()
получает шанс изменить запрос до его отправки.
В документе для .post()
, есть это утверждение, которое объясняет:
В сложных случаях вы можете получить доступ к самому объекту данных формы через r.form (). Это может быть изменено, пока запрос не будет запущен в следующем цикле цикла обработки событий. (Обратите внимание, что эта вызывающая форма () удалит текущие установленные данные формы для этого запроса.)
В приведенном выше утверждении r
- это возвращаемое значение от вызова request.post()
, поэтому r.form()
относится к request.post(...).form(...)
, что является вашей конкретной ситуацией.
И, в исходный код это комментарий:
// start() is called once we are ready to send the outgoing HTTP request.
// this is usually called on the first write(), end() or on nextTick()