Я пытаюсь создать api из серверов braintree. Ссылаясь на этот документ https://developers.braintreepayments.com/javascript+node/reference/general/result-handling/search-resultsNodejs stream (Ошибка: не удается установить заголовки после их отправки)
Чтобы получить доступ ко всем транзакциям со своего сервера, я должен вернуть поток узлов.
экс
app.get('/project', function(req, res) {
if(req.user) {
var stream = gateway.transaction.search(function (search) {
search.customerId().is(req.user.id);
});
stream.on("ready", function() {
console.log(stream.searchResponse);
});
stream.on("data", function (data) {
res.json(data) // can't set headers after they are sent.
});
}
});
Я понимаю возвращает поток данных в куски, так что выше res.json()
, скорее всего, вызывается несколько раз приводит к Error: Can't set headers after they are sent
.
Итак, мой вопрос в том, как я могу отправить эти данные клиенту в один кусок? Потоки nodejs меня сбивают с толку, я собираюсь больше узнать об этом, но было бы прекрасно понять, как отправить данные клиенту без повторной отправки заголовков.
'res.json()' предназначен для использования как один отклик и заканчивается t он ответил. Он не может быть вызван более одного раза с тем же запросом/ответом. Он также, как правило, не может использоваться на произвольных фрагментах данных, поскольку для получения юридического JSON требуется полностью сформированная часть данных javascript. – jfriend00
Да, я получаю это до степени, но мой вопрос заключается в том, как я беру эти данные внутри, '.on ('data')' callback и отправлять эти данные клиенту. Может быть, я должен улучшить свои навыки работы с javascript и создать функцию из обратного вызова или что-то, а затем использовать 'res.json()' внутри потока '.on ('end')' callback? –
Кроме того, вы действительно хотите отправить JSON клиенту или просто хотите передать результаты клиенту? Я не знаю, чего вы на самом деле пытаетесь достичь. – jfriend00