В ответ на заголовок вашего вопроса:
Можно ли использовать res.send (foo) дважды?
Нет, вы не можете вызвать его дважды длятот же запрос.
См. вторую часть ответа, поскольку ОП изменил свой вопрос после того, как я написал эту первую часть
В Express вы можете использовать только res.send()
или res.json()
или res.end()
один раз за запрос. Когда вы выполняете их, он отправляет запрос. Если вы попытаетесь отправить больше по одному и тому же запросу, он ничего не сделает и в Express выдаст предупреждение.
res.write()
может быть вызвано несколько раз, после чего следует res.end()
, когда вы, наконец, закончитес запросом.
В вашем примере:
res.status(200).send({token})
res.end()
res.send()
уже вызывает .end()
, поэтому попытка его повторного вызова считается ошибкой, поскольку запрос уже былотправлено.
К вашему сведению, .status(200)
не обязательно. Состояние по умолчанию уже 200, поэтому res.send({token})
уже будет иметь статус 200.
Более недавний ответ на измененный вопрос
Теперь, когда выполностью изменил вопрос на res.write({token})
, это не работает, потому что res.write()
требует String
или Buffer
в качестве аргумента, и вы дали ему объект. Вам нужно будет либо вручную конвертировать объект в JSON:
res.type('application/json');
res.write(JSON.stringify({token}));
res.end();
И учтите, что это также устанавливает соответствующий тип контента. Если ваш объект имеет большой размер res.write()
, возможно, вам также придется обратить внимание на переполнение буфера записи и прослушать событие drain
. res.write()
- это средство гораздо более низкого уровня (на уровне http, а не на уровне Express), чем функции Express для отправки данных.
Встроенный в Express, вы можете использовать res.send()
или res.json()
которые представляют собой методы Express, которые будут одновременно передавать объект, автоматически преобразовывать его в JSON и также устанавливать тип содержимого JSON. Он также будет обрабатывать любые проблемы с заполнением буфера в потоке записи.
res.send({token});
или, я предпочитаю быть более явным в моем коде Express с:
res.json({token});
И, если выпытаясь отправить несколько фрагментов данных, вы можете поместить их в один и тот же объект:
res.json({token, role});